SQL查询:如何查找不存在指定列值的所有名称
SQL查询实现方案
首先假设你使用的数据表名为person_spirit_animal,实际使用时替换为你的真实表名即可,以下提供几种常用的实现方式:
方式1:NOT IN 子查询写法
逻辑直观容易理解,适合小数据量场景:
SELECT DISTINCT Name FROM person_spirit_animal WHERE Name NOT IN ( SELECT DISTINCT Name FROM person_spirit_animal WHERE `Spirit Animal` = 'Wolf' );
方式2:GROUP BY + HAVING 聚合写法
执行效率更高,适合数据量较大的场景:
SELECT Name FROM person_spirit_animal GROUP BY Name HAVING COUNT(CASE WHEN `Spirit Animal` = 'Wolf' THEN 1 END) = 0;
方式3:NOT EXISTS 关联查询写法
可以避免NOT IN子查询遇到空值时的异常问题,兼容性更好:
SELECT DISTINCT t1.Name FROM person_spirit_animal t1 WHERE NOT EXISTS ( SELECT 1 FROM person_spirit_animal t2 WHERE t2.Name = t1.Name AND t2.`Spirit Animal` = 'Wolf' );
注意:因为列名
Spirit Animal包含空格,MySQL语法下用反引号包裹,如果你使用的是其他数据库,需要对应调整转义符:SQL Server用方括号[Spirit Animal],Oracle用双引号"Spirit Animal"。
内容的提问来源于stack exchange,提问作者duppydodah
相关产品推荐
相关产品推荐

