Oracle中不存在

fcy6dtqo  于 2023-06-22  发布在  Oracle
关注(0)|答案(1)|浏览(113)

我有表(供应商)列(sup_status)包含值'A'和'I',现在我选择值'A'使用不存在。但在真实的情况下,主查询返回sup_stauts 'A'和'I',因此我需要使用not exists选择sup_status='A'记录。但结果并没有到来。我不想使用not in操作符。
例如

SELECT SUP_STATUS FROM SUPPLIER

SUP_STATUS
    A
    I

    
    select sup_status from supplier where not exists(select 
    sup_status from supplier where sup_status='I')

期望输出

SUP_STATUS
     A

 MAIN QUERY where not exists(select sup_status from supplier
    where sup_status='I')
enyaitl3

enyaitl31#

使用查询时:

select sup_status
from   supplier
where  not exists(
         select sup_status
         from   supplier
         where  sup_status='I'
       )

然后,子查询与外部查询不相关,因此子查询将搜索表的整个结果集,以查看是否存在供应商状态为I的任何行。如果整个结果集中只有一行,则查询将不输出任何内容。
如果要将子查询关联到外部查询,则需要在查询中指定。例如,如果你想在supplier_name上关联:

select sup_status
from   supplier s
where  not exists(
         select sup_status
         from   supplier x
         where  x.sup_status='I'
         and    s.supplier_name = x.supplier_name
       )

您还可以使用分析函数,这样就不必使用相关的子查询:

SELECT sup_status
FROM   (
  SELECT sup_status,
         COUNT(CASE sup_status WHEN 'I' THEN 1 END)
           OVER (PARTITION BY supplier_name) AS has_i
  FROM   supplier
)
WHERE  has_i = 0;

相关问题