Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中,在外部查询中加入联合结果是一种好做法吗_Mysql_Sql - Fatal编程技术网

在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放在后面,只是因为我先写了工会。也许我应该改变联合似乎是个好主意,我以前没听说过。相应地编辑了问题。