如何在 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
我有两个 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