AnimalClass表SQL查询需求:筛选指定SocialID对应AnimalId的雌雄个体
正确SQL查询方案
你的原语句问题在于,同时要求当前记录的SocialID是X2F8或A2F5,这就把同AnimalId下的male记录排除了——毕竟male的SocialID不是这两个值。要实现需求,得先找出存在符合条件female个体的AnimalId,再筛选这些AnimalId下的male和female记录,下面是两种可行的写法:
方法一:使用IN子查询
SELECT * FROM AnimalClass WHERE Gender IN ('male', 'female') AND AnimalId IN ( -- 先筛选出有目标female个体的AnimalId SELECT AnimalId FROM AnimalClass WHERE SocialID IN ('X2F8', 'A2F5') AND Gender = 'female' )
方法二:使用自连接
SELECT DISTINCT ac.* FROM AnimalClass ac -- 关联到符合条件的AnimalId对应的记录 JOIN AnimalClass ac_filter ON ac.AnimalId = ac_filter.AnimalId WHERE ac.Gender IN ('male', 'female') AND ac_filter.SocialID IN ('X2F8', 'A2F5') AND ac_filter.Gender = 'female'
两种写法都能得到你要的结果:AnimalId1的male和female、AnimalId2的male和female记录。
内容的提问来源于stack exchange,提问作者HeimWinz
相关产品推荐
相关产品推荐

