2014-10-05 68 views
1

我很新的mySQL查詢,並努力實現我需要的結果。 我有兩張我需要呈現的用戶信息表。這些表如下:mySQL表加入 - 錯誤的答案

users 
+----+------------------+ 
| id | email   | 
+----+------------------+ 
| 1 | [email protected] | 
| 2 | [email protected] | 
| 3 | [email protected] | 
+----+------------------+ 

user_detail 
+----------+--------+--------+ 
| detailid | userid | detail | 
+----------+--------+--------+ 
| 1  | 1 | Joe | 
| 2  | 1 | Soap | 
| 1  | 2 | John | 
| 2  | 2 | Doe | 
| 1  | 3 | Fred | 
| 2  | 3 | Bloggs | 
+----------+--------+--------+  

我已經構建了連接表以下查詢:

SELECT id, detail , email 
FROM users 
LEFT JOIN user_detail 
ON users.id=user_detail.userid 
ORDER by id 

查詢產生這樣的結果:

+--------+--------+------------------+ 
| userid | detail | email   | 
+--------+--------+------------------+ 
| 1 | Joe | [email protected] | 
| 1 | Soap | [email protected] | 
| 2 | John | [email protected] | 
| 2 | Doe | [email protected] | 
| 3 | Fred | [email protected] | 
| 3 | Bloggs | [email protected] | 
+--------+--------+------------------+  

我正在努力達成是這樣的:

+--------+---------+---------+------------------+ 
| userid | detail1 | detail2 | email   | 
+--------+---------+---------+------------------+ 
| 1 | Joe | Soap | [email protected] | 
| 2 | John | Doe  | [email protected] | 
| 3 | Fred | Bloggs | [email protected] | 
+--------+---------+---------+------------------+  

你能幫我指點正確的方向嗎?

回答

2
SELECT id, 
MAX(CASE WHEN detaildid=1 THEN detail END) as detail1, 
MAX(CASE WHEN detaildid=2 THEN detail END) as detail2, 
email 
FROM users 
LEFT JOIN user_detail 
ON users.id=user_detail.userid 
GROUP BY id,email 
ORDER by id 

如果您有許多明細信息,可以動態編寫此信息。

+1

哇 - 你給我介紹了一個全新的SQL代碼區我沒有理念。非常感謝。看起來我有一個新的學習領域需要調查。 – talkpoppycock 2014-10-05 16:19:04

+0

@talkpoppycock如果您想了解更多信息,請搜索mysql數據透視表。 – Mihai 2014-10-05 16:21:23

2

您可以加入同一個表兩次,一次查看詳細編號1和另一個實例詳細ID 2

SELECT id, d1.detail, d2.detail, email 
FROM users u 
LEFT JOIN user_detail d1 
ON u.id = d1.userid 
AND d1.detailid = 1 
LEFT JOIN user_detail d2 
ON u.id = d2.userid 
AND d2.detailid = 2 
ORDER BY ID