基于第二列条件筛选数据:排除包含Green的ID
正确筛选方案:排除所有包含Green的ID的全部记录
你的原SQL语句WHERE colors_allowed != 'Green'仅会过滤掉单条颜色为Green的行,但如果同一个ID存在其他颜色的记录,这些记录依然会被返回——这和你“排除所有包含Green的ID”的需求不符。要实现需求,需要先定位所有存在至少一条Green记录的ID,再排除这些ID的全部数据,以下是几种可行方案:
方案1:使用NOT IN子查询
先通过子查询找出所有包含Green的ID,再在主查询中排除这些ID:
SELECT * FROM Table WHERE ID NOT IN ( SELECT ID FROM Table WHERE colors_allowed = 'Green' )
方案2:使用LEFT JOIN筛选无匹配的ID
通过左连接关联有Green记录的ID集合,筛选出未匹配到的ID(即没有Green记录的ID):
SELECT t.* FROM Table t LEFT JOIN ( SELECT DISTINCT ID FROM Table WHERE colors_allowed = 'Green' ) g ON t.ID = g.ID WHERE g.ID IS NULL
方案3:使用NOT EXISTS子查询
检查当前ID是否存在Green记录,仅保留不存在该记录的ID数据:
SELECT * FROM Table t WHERE NOT EXISTS ( SELECT 1 FROM Table WHERE ID = t.ID AND colors_allowed = 'Green' )
说明
三种方案本质都是先识别出所有“沾过Green”的ID,再整体排除这些ID的所有行,这样就能彻底移除555、888这类包含Green的ID的全部记录,符合你的需求。
内容的提问来源于stack exchange,提问作者Dijinero
相关产品推荐
相关产品推荐

