我有两个表(例如在这里创建),如:
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
(上面提到的查询只是样本)。 执行此查询后,我收到错误消息:
语法错误:在select子句中的UNION附近
有人可以告诉我这里有什么问题。是否有其他选项以上述格式获取输出表?
答案 0 :(得分:8)
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
答案 1 :(得分:4)
您可以尝试COALESCE
COALESCE
函数返回其第一个参数 空值。仅当所有参数都为空时才返回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
答案 2 :(得分:3)
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
编辑:在我的查询中添加了coalesce语句,如果a.x1不存在但b.x2确实存在,则返回x的值,如果y1或y2不存在字段,则添加0
答案 3 :(得分:1)
错误是因为UNION不是可以在列列表中使用的命令,它在设置级别,你可以选择UNION两个:
SELECT * FROM table1
UNION
SELECT * FROM table2
他们只需要有相同的列