2014-10-05 5 views
1

Я довольно новичок в запросах mySQL и изо всех сил стараюсь достичь требуемого результата. У меня есть две таблицы информации о пользователе, которые мне нужно представить. Таблицы являются следующими:mySQL Table Join - неправильный ответ

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

Wow - Ты ввел меня в совершенно новый SQL кода области, я не имел ни малейшего представления о. Большое спасибо. Похоже, у меня есть новая область обучения для исследования. – talkpoppycock

+0

@talkpoppycock Найдите mysql pivot, если хотите узнать больше. – Mihai

2

Вы можете присоединиться к той же таблицы дважды, один раз для детального идентификатора 1, а другой, например, для детального ид 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