2010-09-07 41 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