我有$member_id
,有5个表,这些成员的详细信息存储在多行的这些表中。
要从这些表中获取此用户数据,我可以使用JOIN
和UNION
:
//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;
哪一个优先?哪一个有更好的表现?当你想从许多与外键相关的表中获取一些信息时,真正的方法是什么?
答案 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语句