【发布时间】:2021-01-22 03:27:29
【问题描述】:
我在尝试使用UNION SQL 查询链接 5 个表时遇到问题。问题之一是我需要的每个 SQL 查询中由UNION 分隔的元素数量不同。当我在查询中使用 '' 使每个查询中的元素数量相等时,它只显示第一个查询的结果。这是链接 5 个表的查询。
(SELECT a.a1,b.b1
FROM a,b
WHERE a.a2 = b.b2)
UNION
(SELECT a.a1,c.c1
FROM a,c
WHERE a.a3 = c.c3)
UNION
(SELECT a.a1,d.d1,d.d2
FROM a,d
WHERE a.a4 = d.d4)
UNION
(SELECT a.a1,e.e1,e.e2,e.e3
FROM a,e
WHERE a.a5 = e.e5)
这显示了一个错误,而当我重写它以使元素数量相等(这里为 4)为:
(SELECT a.a1,b.b1,'',''
FROM a,b
WHERE a.a2 = b.b2)
UNION
(SELECT a.a1,c.c1,'',''
FROM a,c
WHERE a.a3 = c.c3)
UNION
(SELECT a.a1,d.d1,d.d2,''
FROM a,d
WHERE a.a4 = d.d4)
UNION
(SELECT a.a1,e.e1,e.e2,e.e3
FROM a,e
WHERE a.a5 = e.e5)
我只得到第一个查询的结果,即 SELECT a.a1,b.b1,'','' from a,b where a.a2 = b.b2 的结果
【问题讨论】:
-
UNION表示尝试获取的列数必须相同。 -
是的,所以我使用 '',使列返回相同,但我只得到第一个查询的结果(实际上有 4 个查询由联合分隔)
-
你确定你只从第一个查询中得到结果吗?原因,结果列名将与第一个查询相同
-
补充一下 Rahul 所说的,合并的联合查询确实只会显示第一次选择的列的名称。可能是这样,因此您误解了,因为仅显示第一个查询的结果。 OKie 现在验证它 - 唯一的方法是在 SSMS 中单独触发这 5 个查询,然后您将立即知道您的猜测是否正确。
-
是的,我只得到第一个查询的结果,即使单独运行子查询正在给出结果(单独)