我有两个表,我想从第二个表中选择它有第一个表的外键。
条件是: (1)。第二个表的qty字段必须具有大于0的值
或者
(2)。第一个表记录在第二个表中没有相应的条目。
答案 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
分享并享受。