无重复的多列联合查询

Ada*_*gua 4 sql oracle union

我正在尝试编写Union Query来自两个不同表的多个列(废话),但由于某种原因,第二个Select语句的第二列没有显示在输出中。我不知道这是否正确地描绘了图片,但这是我的代码:

Select empno, job
From EMP
Where job = 'MANAGER'
Union
  Select empno, empstate
  From EMPADDRESS
  Where empstate = 'NY'
  Order By empno
Run Code Online (Sandbox Code Playgroud)

输出看起来像:

EMPNO   JOB
4600    NY
5300    MANAGER
5300    NY
7566    MANAGER
7698    MANAGER
7782    MANAGER
7782    NY
7934    NY
9873    NY
Run Code Online (Sandbox Code Playgroud)

我认为 5300 和 7782 不会出现两次,而是会出现在输出中的empstate旁边。job对于所有其他empno的,我认为字段中的值是(null)。是我理解不Unions正确,还是他们应该这样工作?

感谢您提前提供的任何帮助。

Tar*_*ryn 5

如果您希望数据位于单独的列中,您将需要 a 而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
Run Code Online (Sandbox Code Playgroud)

AUNION将两个结果合并为一组,但数据列在同一列中。所以基本上它们被放置在彼此之上:

select col1, col2, 'table1' as src
from table1
union all
select col1, col2, 'table2' as src
from table2
Run Code Online (Sandbox Code Playgroud)

将导致:

col1 | col2 | src
t1   | t1   | table1
t2   | t2   | table2
Run Code Online (Sandbox Code Playgroud)

如果您希望将数据放在单独的列中(听起来像您所做的那样),那么您将使用表的联接。