0

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

为了从这些表中获取这些用户数据,我可以使用JOINand 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;

首选哪一个?哪个性能更好?当您想从许多与外键相关的表中获取一些信息时,真正的方法是什么?

4

2 回答 2

0

如果您需要同一行中的所有列,则应使用 join。对于逐列,您应该使用 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;
于 2012-11-19T08:57:27.047 回答
0

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

于 2012-11-19T08:57:38.220 回答