oracle选择第二个表中是否没有条目

时间:2010-06-29 13:33:01

标签: sql oracle

我有两个表,我想从第二个表中选择它有第一个表的外键。

条件是: (1)。第二个表的qty字段必须具有大于0的值

或者

(2)。第一个表记录在第二个表中没有相应的条目。

4 个答案:

答案 0 :(得分:2)

也许你想要这个?

select t1.pk, t2.qty
from   t1
left outer join t2 on t2.fk = t1.pk
where (t2.fk is null or t2.qty > 0);

“t2.fk为null”处理没有匹配t2行的t1行,“t2.qty> 0”负责处理匹配t2行的t1行。

答案 1 :(得分:1)

我想你需要类似下面的内容

select * from the table1 t1
               where t1.value > 0 and 
                     t1.id not in (select distinct foreign_id  from table2 t2)

答案 2 :(得分:0)

我从巴拉特的回答开始,做了一些改变:


  select * from table1
    where t1.id in
       (  
        select t1.id from table1 t1, table2 t2  
          where t1.id = t2.id (+) and t2.is is null 
        union all
        select t1.id from table1 t1, table2 t2  
          where t1.id = t2.id and t2.value >  0 
       )

如果您更喜欢ANSI语法:


  select * from table1 t1
    where t1.id in
       (  
        select t1.id 
           from table1 t1 left outer join table2 t2  
           on t1.id = t2.id 
           where t2.id is null
        union all
        select t1.id 
           from table1 t1 join table2 t2  
           on t1.id = t2.id and t2.value > 0
       )

我理解问题的方法是你想要t1(父级)中没有子级的所有行。这就是工会之前的选择。您还希望t1中具有至少一个值为>的子项的所有行这就是联盟之后的选择。

t1中的每一行将被选择一次,或者根本不被选择。那是你想要的吗?

答案 3 :(得分:0)

如果我正确理解了这个问题,我认为以下内容会为您提供所需的答案:

SELECT *
  FROM TABLE1 t1
  LEFT OUTER JOIN TABLE2 t2
    ON (t2.ID = t1.ID)
  WHERE t2.ID IS NULL OR
        t2.QTY > 0

分享并享受。