我正在处理一个查询,并提出了像这样的解决方案
click
这完全符合我的要求,而且使用的执行时间也不多。但是,如果将SELECT a.c1, a.c2, b.c3, b.c4
FROM table4 AS a
LEFT JOIN ((
SELECT c1, c2 FROM table1 LEFT JOIN table2 ... something
) UNION ALL (
SELECT c3, c4 FROM table1 LEFT JOIN table3 ... something
)) AS b
ON a.key = b.key
WHERE a.key ... something
ORDER BY a.key
子句的结果放在另一个UNION
中并且SELECT
与查询中的另一个表进行JOIN
,那对我来说感觉有点奇怪。
所以我的问题是:使用像这样的查询是一个好习惯。或者我应该找到更好的解决方案?
答案 0 :(得分:2)
这个查询相当复杂,但是这个复杂性是否是您想要实现的目标所需要的,这不是问题。我们也不能回答这个问题,不知道你的表格结构,真实的查询和期望的结果。
但至于技术方面:你的查询完全没问题。如果这是获得所需数据的最直接方式,则没有任何反对意见。没有规则您不应该外部加入联合结果等。您只需将数据一步一步地放在一起,如果您最终得到此查询,那就是它。
至于UNION vs. UNION ALL,正如戈登·林诺夫所说:经常会有人写UNION而不是UNION ALL,因此不情愿地给DBMS做更多的工作。但是,在您的情况下,它可能会更改结果,因此您必须考虑是否可以在UNION查询中进行重复,以及是否要删除它们。
答案 1 :(得分:0)
试试这个,在我看来它应该更好
SELECT a.c1,a.c2,b.c3,c.c4
FROM table1 as a
LEFT JOIN table2 as b on ...
LEFT JOIN table3 as c on ...
WHERE something
ORDER BY a.key