微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL用外键连接多个表

如何解决MySQL用外键连接多个表

我将地址信息存储在多个表中:国家/地区、邮政编码、街道和电话号码。

CREATE TABLE country (
country_id INT,name VARCHAR(45),PRIMARY KEY(country_id));

CREATE TABLE zip (
zip_id INT,zip VARCHAR(45),PRIMARY KEY(zip_id));

CREATE TABLE street (
street_id INT,PRIMARY KEY(street_id));

CREATE TABLE number (
number_id INT,number INT,PRIMARY KEY(number_id));

我使用包含前面提到的表的 ID 作为外键的地址表将这些信息放在一起。

CREATE TABLE address (
address_id INT,country_id INT,zip_id INT,street_id INT,number_id INT,PRIMARY KEY(address_id),FOREIGN KEY(country_id) REFERENCES country(country_id),FOREIGN KEY(zip_id) REFERENCES zip(zip_id),FOREIGN KEY(street_id) REFERENCES street(street_id),FOREIGN KEY(number_id) REFERENCES number(number_id));

如何用一条 sql 语句显示一个完整的地址?

解决方法

正如评论中首先提到的,您需要将其他表中的 id 添加到地址表中。在上面的 sql 中,您设置了与外键的关系,但地址表没有任何可将其映射到的字段。您应该像这样创建地址表:

CREATE TABLE address (
address_id INT,country_id INT,zip_id INT,street_id INT,number_id INT,PRIMARY KEY(address_id),FOREIGN KEY(country_id) REFERENCES country(country_id),FOREIGN KEY(zip_id) REFERENCES zip(zip_id),FOREIGN KEY(street_id) REFERENCES street(street_id),FOREIGN KEY(number_id) REFERENCES number(number_id));

然后你可以像这样加入:

SELECT a.address_id,c.name,s.name,n.number,z.zip
FROM address a
JOIN country c ON c.country_id = a.country_id
JOIN street s ON s.street_id = a.street_id
JOIN number n ON n.number_id = a.number_id
JOIN zip z ON z.zip_id = a.zip_id

但是为数字(如果您指的是街道号码?)和 zip 制作表格可能不是最好的主意。通常,您需要一个国家/地区表,但为每个 zip 设置一个表,而不是将它们直接添加到地址表中似乎是错误的。但我没有所有信息,所以你可能有充分的理由。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。