mysql - MySQL 中两个表的自然连接

标签 mysql sql inner-join

在过去一个小时的大部分时间里,我一直在查看这段代码,试图找出我的失误。这可能是显而易见的,但在电脑前呆了这么长时间后,我可能只需要第二双眼睛就能把它弹出来。我连接了多个表以保持 1NF 和 2NF,但是有两个表让我绊倒。

我有一个主表,名为 my_contacts,还有一个保存州/城市信息的表,名为 zip_code。 zip_code 保存主键行“zip_code”,而 my_contacts 保存其外键。

问题是,当我尝试加入他们时,我什么也没得到。我是不是哪里搞砸了?下面是每个的 SHOW CREATE TABLE:

对于 my_contacts:

    CREATE TABLE `my_contacts` (
    `contact_id` int(11) NOT NULL AUTO_INCREMENT,
    `last_name` varchar(100) DEFAULT NULL,
    `first_name` varchar(100) DEFAULT NULL,
    `phone` varchar(13) DEFAULT NULL,
    `email` varchar(100) DEFAULT NULL,
    `gender` char(1) DEFAULT NULL,
    `birthday` date DEFAULT NULL,
    `prof_id` int(11) DEFAULT NULL,
    `zip_code` int(11) DEFAULT NULL,
    PRIMARY KEY (`contact_id`),
    KEY `mc_profid_fk` (`prof_id`),
    KEY `my_zip_fk` (`zip_code`),
    CONSTRAINT `mc_profid_fk` FOREIGN KEY (`prof_id`) 
    REFERENCES `profession` (`prof_id`),
    CONSTRAINT `my_zip_fk` FOREIGN KEY (`zip_code`) REFERENCES `zip_code` (`zip_code`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

邮政编码:

    CREATE TABLE `zip_code` (
    `zip_code` int(11) NOT NULL AUTO_INCREMENT,
    `city` varchar(50) DEFAULT NULL,
    `state` char(2) DEFAULT NULL,
    PRIMARY KEY (`zip_code`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

提前致谢。

最佳答案

zip_code 表中的 zip_code 设置为 auto_increment。

对于该表中的该字段来说,这似乎不是一个可能的选择。您实际上将 zip_code 存储在哪里?顺便说一句,我希望将实际的邮政编码存储为字符串,以处理前导 0。邮政编码可能看起来像一个数字,但它实际上不是一个数字(排序定义不明确,算术运算没有意义)。

关于mysql - MySQL 中两个表的自然连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15776330/

相关文章:

mysql - 在 openshift 上部署 grails war 文件后显示空白页

javascript - 在 MySQL 查询中使用 javascript run select 选项

java - Oracle.jdbc.driver.OracleDriver() 不存在错误

sql - 必须有一种方法可以删除 SQL Server 中的数据而不会使日志过载

mysql - 使用 phpmyadmin 的 mySQL INNER JOIN 语法

php - 如何在不同的表中查看页面是否处于事件状态?

php - 在 PHP 中定义时使用变量值

mysql - 创建表时 UNIQUE KEY 语法错误

sql - Oracle 日期比较(无效标识符)

mysql - SQL 更新在 JOIN 子查询中抛出错误