我经常谷歌我的问题,因为它们不仅仅对我有用。但是,这次我找不到答案(可能没有使用正确的关键字)。
问题描述:
我有两张桌子 第一个表 - defenition_list 包含唯一ID和名称
ID | NAME
-----------
1 | BMW
2 | AUDI
3 | VW
4 | MAZDA
第二个表 - used_id 保存第一个表的ID
ID | def_uid1 | def_uid2 | def_uid3
------------------------------------
1 | 2 | 3 | 2
2 | 4 | 2 | 1
通常如果我需要返回一列的值,我会选择如下:
SELECT d.NAME, u.def_uid1 FROM defenition_list d, used_id u WHERE d.ID=u.def_uid1
但是如何编写查询以同时获取def_uid2和def_uid3的名称?所以结果如下:
ID | def_uid1 | def_uid2 | def_uid3 |
--------------------------------------
1 | AUDI | VW | AUDI |
2 | MAZDA | AUDI | BMW |
答案 0 :(得分:2)
你必须加入你的名字表3次:
SELECT used_id.ID, d1.name, d2.name, d3.name
FROM used_id
LEFT JOIN definition_list AS d1 ON used_id.def_uid1 = d1.id
LEFT JOIN definition_list AS d2 ON ...
LEFT JOIN definition_list AS d3 ON ...
答案 1 :(得分:1)
您有两种选择。一种选择是多次连接表,每个列需要获取一次,或者您可以在每个列的select子句中编写子查询,如下所示:
SELECT
u.id,
(SELECT name FROM definition_list WHERE id = u.def_uid1) AS def_uid1,
(SELECT name FROM definition_list WHERE id = u.def_uid2) AS def_uid2,
(SELECT name FROM definition_list WHERE id = u.def_uid3) AS def_uid3
FROM used_id u;
这是一个SQL Fiddle示例,使用了我提到的两个选项。