如何在 select 子句中使用 union?

How to use union in select clause?

我有两个 table(例如在此处创建),例如:

X1   Y1
a   1
b   2
c   3
d   4 

X2   Y2
a    5
m    6
n    7
b    4

我想要输出列:

X    Y1   y2
a    1    5
b    2    4
c    3    0
d    4    0
m    0    6
n    0    7

我试过的是:

SELECT (A.X1 UNION B.X1) AS X, A.Y1,B.Y2
FROM A FULL OUTER JOIN B
ON A.X1 = B.X2

(上述查询只是示例)。 执行此查询后,我收到错误消息:

Syntax error: near UNION in select clause

谁能告诉我这里出了什么问题。是否有任何其他选项可以以上述格式获取输出 table?

你可以试试COALESCE

The COALESCE function returns the first of its arguments that is not null. Null is returned only if all arguments are null.

SELECT COALESCE(A.X1,B.X2) AS X, COALESCE(A.Y1, 0) AS Y1, COALESCE(B.Y2, 0) AS Y2
FROM A FULL OUTER JOIN B
ON A.X1 = B.X2

union 用于一个接一个地连接结果。您正在尝试并排显示 join 个结果(您已经这样做了!)。您唯一缺少的是 coalesce 处理缺失值的调用:

SELECT COALESCE(a.x1, b.x2) AS x, 
       COALESCE(a.y1, 0) AS y1, 
       COALESCE(b.y2, 0) AS y2
FROM   a 
FULL OUTER JOIN b on a.x1 = b.x2

错误是因为 UNION 不是可以在列列表中使用的命令,它是在集合级别上,您可以 UNION 两个选择,如:

SELECT * FROM table1
UNION
SELECT * FROM table2

他们只需要有相同的列

SELECT Coalesce(a.x1,b.x1) AS X, coalesce(a.y1,0) as Y1 coalesce(b.y2,0) as Y2
FROM a
FULL OUTER JOIN
b ON a.x1 = b.x2

这里不需要 UNION 语句,union 用于将一个 select 的结果集添加到另一个 select

的结果集

你只需要在此处使用你的连接和正确的 on 语句(你做对了)并从其中一个表中获取 x1 或 x2,因为 x1 将等于同一行中的 x2

编辑:如果 a.x1 不存在但 b.x2 确实存在,则将合并语句添加到我的查询到 return x 的值,如果 y1 或 y2 的字段不存在,也添加 0