【问题标题】:MySQL join multiple tables with foreign keysMySQL 使用外键连接多个表
【发布时间】:2021-03-22 08:14:15
【问题描述】:

我将我的地址信息存储在几个表格中:国家、邮政编码、街道和号码。

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,
name VARCHAR(45),
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 语句显示完整的地址?

【问题讨论】:

标签: mysql join foreign-keys


【解决方案1】:

正如 cmets 首先提到的,您需要将其他表中的 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 都有一个表,而不是直接将它们添加到地址表中似乎是错误的。但我没有所有信息,所以你可能有充分的理由。

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2016-01-07
    • 1970-01-01
    相关资源
    最近更新 更多