在MySQL中,在外部查询中加入联合结果是一种好做法吗
我正在做一个查询,并提出了这样一个解决方案在MySQL中,在外部查询中加入联合结果是一种好做法吗,mysql,sql,Mysql,Sql,我正在做一个查询,并提出了这样一个解决方案 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.ke
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
合并,这让我觉得有点奇怪
所以我的问题是:使用这样的查询是一种好的做法吗。或者我应该找到一个更好的解决方案?试试这个,在我看来应该更好
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
这个查询相当复杂,但对于您想要实现的目标,是否需要这种复杂性并不是这里的问题。我们也无法回答这个问题,因为我们不知道您的表结构、实际查询和期望的结果 但在技术方面:你的问题完全可以。如果这是获得所需数据的最直接的方法,那么没有什么反对它的。没有规则规定你不应该加入联合结果或类似的东西。您只需一步一步地将数据放在一起,如果您最终得到这个查询,那么就是它
至于UNION与UNION ALL,正如Gordon Linoff所提到的:经常会有人编写UNION而不是UNION ALL,因此不愿意给DBMS更多的工作去做。但是,在你的情况下,它可能会改变结果,所以你必须考虑在你的联合查询中是否有重复,以及是否要删除它们。我会先放<代码>表4<代码>,然后使用<代码>左连接< /代码>(首选项),尝试使用<代码>联合所有而不是<代码>联合< /代码>。我们无法决定这对您来说是否是一个足够好的解决方案。谢谢@GordonLinoff。我之所以把表4放在后面,只是因为我先写了工会。也许我应该改变联合似乎是个好主意,我以前没听说过。相应地编辑了问题。