2015-10-27 48 views
1

我有兩個表:的MySQL獲得相同的參數用不同的密鑰

用戶:

id  first_name  last_name 
-------------------------------- 
1  John   Smith 
2  Adam   Jones 

user_planner_tasks:

id  moderator  user_id 
----------------------------- 
1  1    2 
2  2    1 

我想從 'user_planner_tasks' 表中顯示的每個任務。同時顯示主持人和用戶的姓名和相應的ID。

我希望有這樣的事情:

id moderator  first_name  last_name  user_id  first_name  last_name 
------------------------------------------------------------------------------------- 
1  1    John   Smith   2   Adam   Jones 

我知道我必須使用JOIN 某種但我不能爲我的生活,看着辦吧。任何參考將是偉大的!

+1

這會是一個支點查詢,技術上,但不會工作,因爲你不能有一個結果集同名的多個領域。你可以有'fn1,ln1,fn2,ln2等......',但是在MySQL中不支持數據透視查詢,並且這種解決方法變得非常難看,速度非常快,並且無論如何都不能處理任意的N-way行 - >列樞軸。 –

回答

1
SELECT t.id, 
     t.moderator, 
     m.first_name, 
     m.last_name, 
     t.user_id, 
     u.first_name, 
     u.last_name 
FROM user_planner_tasks t 
LEFT JOIN users u 
ON t.user_id = u.id 
LEFT JOIN users m 
ON t.moderator = m.id 
0

這是一個普通的SQL JOIN教程:http://www.w3schools.com/sql/sql_join.asp

你會找什麼是外連接。

SQL LEFT JOIN語法

SELECT column_name(s) 
FROM table1 
LEFT JOIN table2 
ON table1.column_name=table2.column_name; 

你的可能是這樣的:

SELECT column_name(s) 
FROM `users` 
LEFT JOIN `user_planner_tasks` 
ON users.id=user_planner_tasks.user_id; 
+0

將第二個示例中的column_name(s)更改爲* –

1
SELECT upt.id, 
     upt.moderator, 
     u1.first_name, 
     u1.last_name, 
     u2.id as user_id, 
     u1.first_name, 
     u1.last_name 
FROM user_planner_tasks upt 
LEFT JOIN users u1 ON upt.moderator = u1.id 
LEFT JOIN users u2 ON upt.user_id = u2.id 

這裏你加入對同一個表兩次。

1

在這裏你會得到用戶和主持人

SELECT t.*, u.*,m.* 
FROM user_planner_tasks t 
LEFT JOIN users u ON t.user_id = u.id 
LEFT JOIN users m ON t.mderator = m.id 
相關問題