如何解决表的合并,无重复条件?
我有三个表A,B,C。 A和B具有相同的结构,即相同的列和已经不同的键。我想做的是统一A和B,然后与C加入工会。我知道我可以这样:
(SELECT x FROM A INNER JOIN C ON y WHERE z)
UNION
(SELECT x FROM B INNER JOIN C ON y WHERE z)
但是,我不得不重复这对我来说非常不便的条件,尤其是当查询时间更长并且需要经常调整时。
如果我在内部进行联合,那么查询根本不会为我完成(可能只是花了无法忍受的时间)
SELECT y
FROM (SELECT * FROM A UNION SELECT * FROM B) U
INNER JOIN C on y
WHERE z
是否有一种更优雅,更有效的方式来重复执行此操作?
我使用SAP sql。
解决方法
查询第二次未完成的原因是,通过union
-ing,您丢失了有关该表的所有上下文和统计信息,该表无法使用索引,因此必须下降回到较慢的方法。
听起来第一个选项是唯一的一个,但是您可能可以使用VIEW
来避免重复输入相同的内容。有关详细信息,请参见their documentation。
如果您的栏没有重复,这应该会很好地工作:
SELECT DISTINCT x
FROM ((SELECT *
FROM A INNER JOIN
C
ON y
)
UNION ALL
(SELECT *
FROM B INNER JOIN
C
ON y
)
) abc
WHERE z;