如何为两个不同的条件设置SQL条件优先级

时间:2017-09-28 20:15:38

标签: sql oracle11g

我有两个不同的表' TABLE1 '和' TABLE2 '。这两个表都具有相同的列名 - “ IS_PDF ”。

RE TABLE1.IS_PDF值,我使用 select 语句检索了所需的详细信息,其中我添加了where子句,如下所示。

select * from TABLE1 where TABLE1.IS_PDF = 'Y';

同样,我可以得到TABLE2的值以及TABLE2.IS_PDF ='Y'

现在,我的任务是通过在下面设置优先级,使用一个select语句从两个表'strong> TABLE1 '和' TABLE2 '获取详细信息条件#1 。

  1. 如果 TABLE1.IS_PDF ='Y',则返回符合相同条件的记录。
  2. 如果 TABLE1.IS_PDF ='N' TABLE2.IS_PDF ='Y',则返回符合相同条件的记录。
  3. 如果两者都有IS_PDF ='N',则不返回任何内容。
  4. 我在下面的Select语句中使用了但只在同一时间获得了上述条件#1和2。

    select * from TABLE1, TABLE2
    where
    (TABLE1.IS_PDF = 'Y') or (TABLE2.IS_PDF = 'Y' and TABLE1.IS_PDF = 'N' )
    

    请同样指导。 感谢

2 个答案:

答案 0 :(得分:1)

你似乎想要这样的东西:

select t1.*
from table1 t1
where t1.is_pdf = 'Y'
union all
select t2.*
from table2 t2
where t2.is_pdf = 'Y' and
      not exists (select 1 from table1 t1 where t1.is_pdf = 'Y' and t1.?? = t2.??);

??表示用于在两个表之间进行匹配的列。

答案 1 :(得分:0)

感谢您的快速回复。

示例代码 -

select TABLE1.IS_PDF, TABLE2.IS_PDF, TABLE1.ID, TABLE1.GLOBAL_ID, TABLE1.title, 
from TABLE1, TABLE2
where TABLE1.USER_ID = 82340
and TABLE1.NAME = 'INDIA'
and (TABLE1.IS_PDF = 'Y') or (TABLE2.IS_PDF = 'Y' and TABLE1.IS_PDF = 'N' )

我需要在下面的条件#1上设置优先级。如果条件#1满足,那就没问题了。否则去#2然后#3。

  1. 如果TABLE1.IS_PDF ='Y',则返回匹配相同条件的记录。
  2. 如果TABLE1.IS_PDF ='N'但TABLE2.IS_PDF ='Y'则返回匹配相同条件的记录。
  3. 如果两者都有IS_PDF ='N',则不返回任何内容。