Sql 在筛选条件中使用OR子句-Oracle

Sql 在筛选条件中使用OR子句-Oracle,sql,oracle,Sql,Oracle,我有一个下面的要求,在这个要求中,SQL必须根据很少或很少的条件过滤记录 Table 1 ********** S A B 1 Crow Bird 2 Apple Fruit 3 Orange Fruit 4 Fox Animal 4 Dog Animal 4 Cat Animal 5 Apple Mobile 6 Apple Product Table 2 ********* S A

我有一个下面的要求,在这个要求中,SQL必须根据很少或很少的条件过滤记录

Table 1
**********
S   A       B
1   Crow    Bird 
2   Apple   Fruit  
3   Orange  Fruit
4   Fox     Animal 
4   Dog     Animal 
4   Cat     Animal 
5   Apple   Mobile 
6   Apple   Product

Table 2
*********
S   A       B
1   Crow    Bird
联接表1在S、A、B列上左联接表2

并在应用这些过滤器后提取记录

表2.A为空 表1.B='果味'或表1.B='Mobile'和表1.A'苹果' 表1.B='Animal'和表1.A='Fox'或表1.A='Dog' 所以最终的输出看起来像

S   A   B
1   Crow    Bird - Filtered Out by Condition 1 
2   Apple   Fruit  -Filtered Out by Condition2
3   Orange  Fruit
4   Fox     Animal 
4   Dog     Animal 
4   Cat     Animal - Filtered out by Condition 3
5   Apple   Mobile - Filtered Out by Condition2
6   Apple   Product
我尝试了下面的查询,但它返回了不正确的结果

Select T1.S, T1.A, T1.B 
from (Select * from Table1 ) T1 
left join ( Select * from Table 2 ) T2 
on T1.S=T2.S and T1.A = T2.A and T1.B = T2.B 
where ( ( T2.A is NULL) or ((T1.B='FRUIT' or T1.B='Mobile') 
  and (T1.A<>'Apple')) or ( ((T1.B='Animal') 
  and ( T1.A='Fox' or T1.A='Dog')) ) ) 

要诊断问题的根源,请运行以下查询:

Select T1.S, T1.A, T1.B, T2.A as T2_A,
      CASE WHEN T2.A is NULL 
           THEN 'TRUE'
           ELSE 'FALSE'
      END filter1,
      CASE WHEN (T1.B='Fruit' or T1.B='Mobile') AND (T1.A<>'Apple')
           THEN 'TRUE'
           ELSE 'FALSE'
      END filter2,
      CASE WHEN ((T1.B='Animal') and ( T1.A='Fox' or T1.A='Dog'))
           THEN 'TRUE'
           ELSE 'FALSE'
      END filter3  
from (Select * from Table1 ) T1 
left join ( Select * from Table2 ) T2 
on ( T1.S=T2.S and T1.A = T2.A and T1.B = T2.B )
order by t1.s
;

但是,此行不符合您显示的任何条件。

您有问题吗?有。我尝试了下面的查询,但返回的结果不正确。。从Select*表1中选择T1.S、T1.A、T1.B从T1.S=T2.S和T1.A=T2.A和T1.B=T2.B中选择T1.S、T1.A、T1.B=T2.B,其中T2.A为空或T1.B='FROUT'或T1.B='Mobile'和T1.A'Apple'或T1.B='ANAME'和T1.A='Fox'或T1.A='Dog'谢谢kodrirko,我已将此查询用作子查询,并在最后一个Select子句中使用了筛选条件,得到了所需的结果FILTER1='TRUE'和FILTER2='TRU'以及FILTER3='TRUE'
1   Crow    Bird - Filtered Out by Condition 1