sql - 无重复的多列联合查询

标签 sql oracle union

我正在尝试编写一个包含来自两个不同表的多列的 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/

相关文章:

sql - PostgreSQL 相当于 SQL Server NVARCHAR (MAX)

sql - 从sql中的当前时间戳中选择最后一个和接下来的五个

javascript - NodeJS : Unhandled promise rejection

java - 我的无效字符在哪里(ORA-00911)

mysql - nodejs mysql查询标识符 '?'错误,但连接查询工作

sql - 在 Postgres WHERE 子句中使用 IF 语句

sql - Oracle SQL - 如果存在,删除表并创建

java - 如何在 Java 中联合 List<Date> list1 和 List<Date> list2?

Tsql,union 改变结果顺序,union all 不

sql - 在 PostgreSQL 中组合两个 SELECT 查询