2015-06-01 161 views
1

我通常在谷歌我的問題,因爲他們不是唯一對我來說。但是,這次我找不到答案(可能沒有使用正確的關鍵字)。mysql從另一個表中選擇一行的多個列

問題描述:

我有兩個表。
第一臺 - 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

這取決於你想要什麼,你想加入這兩個表,基於'defenition_list.ID'和'used_id'中的任何/所有列的等同性嗎? –

+0

查看正常化。 – Strawberry

+0

http://sqlfiddle.com/#!9/a6973/2 - 我假設你想列入數據庫的用戶的前3名汽車品牌。 U可以額外的用戶表正確設置user_pref表primary_key(user_id,id_brand)。希望它有幫助。 – Falt4rm

回答

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例如,同時使用我提到的選項。

+0

我更喜歡選項3! – Strawberry

+0

@Strawberry你的選擇是什麼? – AdamMc331

+0

爲什麼,當然正常化! – Strawberry

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 ... 
相關問題