2010-09-07 43 views
4

我想在MySQL中做一個相當複雜的查詢;對我而言至少是複雜的。兩個左連接和一個在MySQL中的聯盟

這裏是什麼,我試圖做一個例子:

SELECT * FROM friends 
LEFT JOIN users ON users.uid = friends.fid1 
LEFT JOIN users ON users.uid = friends.fid2 
WHERE (friends.fid1 = 1) AND (friends.fid2 > 1) 
UNION SELECT fid2 FROM friends 
WHERE (friends.fid2 = 1) AND (friends.fid1 < 1) 
ORDER BY RAND() 
LIMIT 6; 

我找回:ERROR 1066 (42000): Not unique table/alias: 'users'

我在哪裏出錯了,我該如何真的正在執行此查詢?

回答

6

別名你的表,如:

LEFT JOIN users u1 ON u1.uid = friends.fid1 
LEFT JOIN users u2 ON u2.uid = friends.fid2 
+0

解決了一個問題。現在我回來了'錯誤1222(21000):使用的SELECT語句具有不同數量的列'。有什麼想法嗎? – 2010-09-07 03:55:12

+1

+1:始終使別名(表和列)唯一 – 2010-09-07 03:55:40

+1

@Josh Smith:尊重,這是一個不同的錯誤,所以問一個新的問題。 – 2010-09-07 03:56:29

2

你已經寫左爲表不同領域加入兩次,似乎當了解析,以便給他們的別名,然後用friends表加入他們

LEFT JOIN users users1 ON users1.uid = friends.fid1 
LEFT JOIN users users2 ON users2.uid = friends.fid2