从组中选择合格的记录

时间:2010-11-09 17:35:50

标签: sql

有2张桌子。 1是主表,另一个与主表具有1对多的关系。具有许多关系的表具有用作标志的字段。所以它的值通常为Y或null。

所以我想在主表中选择第二个表中有记录的行,只要第二个表中的所有行都在其字段中有一个Y.在其他病房中,如果Y字段具有null或其他值,则它们不符合条件。

所以逻辑是如果所有行都有Y,那么,如果有些行有,有些行没有Y,那么它们不符合选择条件。

希望这很清楚。

谢谢。

3 个答案:

答案 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