如何在Oracle SQL中使用EXISTS

问题描述 投票:-1回答:1

我想获取所有仅显示ID的记录,这些记录没有通过stutus = 2,但是已从特定状态中取消。表是A_ORDERS_LOG和A_ORDERS。

因此,每个ID可以经历各种状态。我有兴趣查看仅那些已从某些状态取消并且尚未通过status = 2的ID。

我已经尝试过]

SELECT *
  FROM A_ORDERS_LOG
 WHERE ( STATUS1 = 0
   AND STATUS2  = 11 )
    OR ( STATUS1 = 1
   AND STATUS2  = 11 )
    OR ( STATUS1 = 3
   AND STATUS2  = 11 )
    OR ( STATUS1 = 4
   AND STATUS2  = 11 )
    OR ( STATUS1 = 41
   AND STATUS2  = 11 )
    OR ( STATUS1 = 42
   AND STATUS2  = 11 )
    OR ( STATUS1 = 43
   AND STATUS2  = 11 )
    OR ( STATUS1 = 5
   AND STATUS2  = 11 )
    OR ( STATUS1 = 6
   AND STATUS2  = 11 )
   AND EXISTS (
       SELECT STATUS1,
              STATUS2
         FROM A_ORDERS_LOG
        WHERE ( STATUS1 != 2
           OR STATUS2 != 2 )
          AND ID IN (
              SELECT ID
                FROM A_ORDERS
       )
)
);

Status2 = 11-表示正在取消,status1是其取消的状态。

我想获取所有仅显示ID的记录,这些记录没有通过stutus = 2,但是已从特定状态中取消。表是A_ORDERS_LOG和A_ORDERS。因此,每个ID都可以通过...

sql oracle
1个回答
0
投票

似乎在确定exists子句之后的过滤状态时,您需要一个not exists和一个where:>

select *
  from a_orders_log o
 where status1 in ( 0, 1, 3, 4, 5, 6, 41, 42, 43 ) and status2 = 11 
   and not exists (select 0
                     from a_orders_log
                    where 2 in ( status1 , status2 ) )
   and exists ( select 1 from a_orders o2 where o2.id = o.id );
© www.soinside.com 2019 - 2024. All rights reserved.