mysql从另一个表

时间:2015-06-01 14:47:26

标签: mysql select

我经常谷歌我的问题,因为它们不仅仅对我有用。但是,这次我找不到答案(可能没有使用正确的关键字)。

问题描述:

我有两张桌子 第一个表 - 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   |

2 个答案:

答案 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示例,使用了我提到的两个选项。