SQL 查询(需要自联接?

  • 本文关键字:查询 SQL sql presto
  • 更新时间 :
  • 英文 :


我有一个包含多个字段和两个 i.d 字段的表,一个字段称为 regular_id,第二个字段称为 special。

每行可以在 regular_id 和 special_id 下有一个值,如果special_id下有一个值,那么它作为regular_id存在于表中的其他地方。

我想构建一个查询,上面写着 -

给我所有special_id字段为 null 的行,但 regular_id 字段中的值在该特殊字段下该表的其他任何地方(任何其他行/记录中(都不存在。

注意:未经测试。

select A.*
from table A
where A.special_id is null
and not exists (select 1 from table B where B.special_id = A.regular_id)

当然,A 和 B 是同一数据库表的别名。

自我

加入是正确的方式。

SELECT a.special_id, a.regular_id
FROM tablename  a
LEFT JOIN tablename b
    ON a.regular_id = b.special_id 
WHERE a.special_id IS NULL
AND b.special_id IS NULL;

注意:将表名替换为实际的表名。

示例数据:

REGULAR_ID  SPECIAL_ID
1           1
1           2
2           1
3           1
1           NULL
3           NULL

结果:

REGULAR_ID  SPECIAL_ID
3           NULL

子查询或存在可以。

这与著名的斯科特非常相似。甲骨文中的 EMP 表。

create table emp(  
  empno    number(4,0),  
  ename    varchar2(10),  
  job      varchar2(9),  
  mgr      number(4,0),  
  hiredate date,  
  sal      number(7,2),  
  comm     number(7,2),  
  deptno   number(2,0),  
  constraint pk_emp primary key (empno),  
  constraint fk_deptno foreign key (deptno) references dept (deptno)  
)

所以你的问题regular_id是斯科特中的empno(员工ID(。EMP 表和special_id是 mgr(经理 ID(

现在你的问题翻译成斯科特。电磁脉冲:其中 mgr 字段为 null,但 empno 字段中的值不存在该表下 mgr 字段下的任何其他位置(在任何其他行/记录中(。

select m.*
from scott.EMP m
where m.mgr IS NULL
and m.empno not in (select mgr from scott.EMP where mgr is not null)

感谢托尔斯滕·凯特纳的更正,请始终注意列表中的空

您的问题翻译成自然语言: The person who has no manager and is not manager of any employee.

相关内容

  • 没有找到相关文章

最新更新