此查询的UNION或JOIN

时间:2012-11-19 08:52:45

标签: mysql

我有$member_id,有5个表,这些成员的详细信息存储在多行的这些表中。

要从这些表中获取此用户数据,我可以使用JOINUNION

//Using JOIN:
SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id AND table1.member_id = '$member_id'

//USING UNION
(SELECT a FROM t1 WHERE member_id = '$member_id')
UNION
(SELECT a FROM t2 WHERE member_id = '$member_id')
ORDER BY a LIMIT 10;

哪一个优先?哪一个有更好的表现?当你想从许多与外键相关的表中获取一些信息时,真正的方法是什么?

2 个答案:

答案 0 :(得分:0)

如果您需要同一行中的所有列,则应使用加入。对于一行一行,您应该使用union 。这是标准。他们不是秘密。

如果此列未出现在所有表中,请记住使用左连接:

SELECT table0.id as a0, table1.id as a1, table2.id as a2, ...
FROM 
   (select '$member_id' as id from dual ) table0
LEFT outer join table1 ON table1.id=table0.id
Left outer JOIN table2 ON table1.id=table2.id 
LEFT outer JOIN table3 ON table2.id=table3.id 

此外,在联合中,您可以标记每一行:

//USING UNION
(SELECT 't1' as t, a FROM t1 WHERE member_id = '$member_id')
UNION ALL
(SELECT 't2' as t, a FROM t2 WHERE member_id = '$member_id')
ORDER BY a LIMIT 10;

答案 1 :(得分:0)

如果您具有相同的结构并且想要删除重复的行,则可以使用UNION,否则最好使用JOIN语句