我正在使用Transact-SQL(Microsoft SQL Server 2012)。
我尝试组合以下两个SELECT语句,以便z中的行将添加到x和y的并集旁边。
但我还没有运气。
The two SELECT statements are:
SELECT x.a, x.b, x.c
FROM x
UNION ALL
SELECT y.a y.b, y.c
FROM y
SELECT z.d, z.e, z.f, z.g
FROM x
FULL OUTER JOIN z
ON (x.h = z.h)
FULL OUTER JOIN y
ON (y.h = z.h)
所有三个表(x,y和z)都包含'h'行。
答案 0 :(得分:0)
看起来您正在尝试在输出中获得七列,我们可以这样做:
SELECT x.a, x.b, x.c, z.d, z.e, z.f, z.g
FROM x
FULL OUTER JOIN z
ON (x.h = z.h)
FULL OUTER JOIN y
ON (y.h = z.h)
UNION ALL
SELECT y.a y.b, y.c, z.d, z.e, z.f, z.g
FROM y
FULL OUTER JOIN z
ON (y.h = z.h)
FULL OUTER JOIN x
ON (y.h = x.h)
除非您需要在两个查询中加入所有三个表,否则可以缩短为:
SELECT x.a, x.b, x.c, z.d, z.e, z.f, z.g
FROM x
FULL OUTER JOIN z
ON (x.h = z.h)
UNION ALL
SELECT y.a y.b, y.c, z.d, z.e, z.f, z.g
FROM y
FULL OUTER JOIN z
ON (y.h = z.h)
您还应评估是否确实需要外连接。只有在您不希望匹配值始终位于两个表中时才需要这样做。