有2张桌子。 1是主表,另一个与主表具有1对多的关系。具有许多关系的表具有用作标志的字段。所以它的值通常为Y或null。
所以我想在主表中选择第二个表中有记录的行,只要第二个表中的所有行都在其字段中有一个Y.在其他病房中,如果Y字段具有null或其他值,则它们不符合条件。
所以逻辑是如果所有行都有Y,那么,如果有些行有,有些行没有Y,那么它们不符合选择条件。
希望这很清楚。
谢谢。
答案 0 :(得分:1)
这样的事情应该可以解决问题...
SELECT p.Field
FROM PrimaryTable p
WHERE NOT EXISTS(SELECT * FROM SecondaryTable s WHERE p.ID = s.ID AND (s.Flag <> 'Y' OR s.Flag IS NULL))
我假设对于给定的PrimaryTable记录,在SecondaryTable中总会有一条记录....或者,如果没有,那么你仍然希望返回主记录。
答案 1 :(得分:0)
select p.*
from primary_table p
inner join secondary_table s
on p.join_key = s.join_key
and s.flag = 'Y'
where not exists(select null from secondary_table s2 where s2.join_key = p.join_key and (s2.flag is null or s2.flag <> 'Y'))
答案 2 :(得分:0)
SELECT
p.*
FROM
PrimaryTable p,
( select s.ID,
count(*) AllRecs,
sum( case when S.Flag = 'Y' then 1 else 0 end ) as YesRecCount
from
SecondaryTable s
group by
s.ID
having
AllRecs = YesRecCount ) squalified
WHERE
p.ID = squalified.ID