请参阅下面的SQL结构:
CREATE table TestTable (id int not null identity, [type] char(1), groupid int)
INSERT INTO TestTable ([type]) values ('a',1)
INSERT INTO TestTable ([type]) values ('a',1)
INSERT INTO TestTable ([type]) values ('b',1)
INSERT INTO TestTable ([type]) values ('b',1)
INSERT INTO TestTable ([type]) values ('a',2)
INSERT INTO TestTable ([type]) values ('a',2)
前四个记录是第1组的一部分,第五和第六个记录是第2组的一部分。
如果组中至少有一个b,那么我希望查询只返回该组的b。如果没有b,则查询应该返回该组的所有记录。
答案 0 :(得分:3)
你去吧
SELECT *
FROM testtable
LEFT JOIN (SELECT distinct groupid FROM TestTable WHERE type = 'b'
) blist ON blist.groupid = testtable.groupid
WHERE (blist.groupid = testtable.groupid and type = 'b') OR
(blist.groupid is null)
工作原理
加入包含b。
然后在where语句中......如果我们存在于该列表中,则只需要输入类型b。否则就拿一切。
作为一个后记,你可以很喜欢这个
的where子句WHERE ISNULL(blist.groupid,testtable.groupid) = testtable.groupid
我认为这不太清楚 - 但往往是高级用户会这样做。