我正在尝试编写一个包含来自两个不同表的多列的 Union Query
(duh),但出于某种原因,第二个 Select
语句的第二列是'出现在输出中。我不知道这是否正确绘制了图片,但这是我的代码:
Select empno, job
From EMP
Where job = 'MANAGER'
Union
Select empno, empstate
From EMPADDRESS
Where empstate = 'NY'
Order By empno
输出如下:
EMPNO JOB
4600 NY
5300 MANAGER
5300 NY
7566 MANAGER
7698 MANAGER
7782 MANAGER
7782 NY
7934 NY
9873 NY
不是 5300 和 7782 出现两次,我认为 empstate
会出现在输出中的 job
旁边。对于所有其他 empno
,我认为字段中的值将是 (null)
。我是不是没有正确理解 Union
,还是它们应该如何工作?
提前感谢您的帮助。
最佳答案
如果您希望数据位于单独的列中,您需要JOIN
而不是UNION
:
Select e.empno, e.job, a.empstate
From EMP e
left join EMPADDRESS a
on e.empno = a.empno
Where job = 'MANAGER'
AND empstate = 'NY'
Order By e.empno
UNION
将两个结果组合成一个集合,但数据列在相同的列中。所以基本上它们是放在一起的:
select col1, col2, 'table1' as src
from table1
union all
select col1, col2, 'table2' as src
from table2
将导致:
col1 | col2 | src
t1 | t1 | table1
t2 | t2 | table2
如果您希望将数据放在单独的列中(这听起来像您所做的那样),那么您将使用表的连接。
关于sql - 无重复的多列联合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13937209/