【问题标题】:How to access data from foreign key table如何访问外键表中的数据
【发布时间】:2014-12-30 09:34:25
【问题描述】:
我有三个表 Company, User , Address 。
company 有三个字段
- comp_id(PK)
- comp_name
- user_id(FK)
- to_address_id(FK)
-
from_address_id(FK)
地址有字段:
- address_id(PK)
- 城市
-
状态
用户有字段
user_id(PK),用户名
to_address_id 和 from_address_id 都是外键,引用同一个表地址并映射到 address_id
现在的重点是如何从表中检索 from_address,我可以从该查询中检索 to_address。
这里我可以从 Shipment 表中获取 to_address_id 和 from_address_id,但是如何根据 address_id 在同一个查询中获取两个地址:
SELECT s.comp_name,u.user_name,a.city
FROM
company s
JOIN
User u
JOIN
Address a
ON
s.user_id = u.user_id
AND s.to_address_id = a.address_id
WHERE
s.user_id = 1001;
【问题讨论】:
标签:
mysql
sql
database
select
join
【解决方案1】:
解决方案 - 您需要 JOIN 两次,每次针对您感兴趣的每个 FK:
SELECT s.comp_name, u.user_name, a_from.city AS city_from, a_to.city AS city_to
FROM company s
LEFT JOIN User u ON s.user_id = u.user_id
LEFT JOIN Address a_from ON s.from_address_id = a_from.address_id
LEFT JOIN Address a_to ON s.to_address_id = a_to.address_id
WHERE s.user_id = 1001;
【解决方案2】:
尝试以下方法:
SELECT s.comp_name
,u.user_name
,a1.city
,a2.city
FROM company s
JOIN User u ON s.user_id = u.user_id
JOIN Address a1 ON s.to_address_id = a1.address_id
JOIN Address a2 ON s.from_address_id = a2.address_id
WHERE s.user_id = 1001;
【解决方案3】:
你要先看看JOIN在查询中的使用。
试试这个:
SELECT s.comp_name,u.user_name,a.city
FROM company s
JOIN User u ON s.user_id = u.user_id
JOIN Address a ON s.to_address_id = a.address_id
WHERE s.user_id = 1001;