添加WHERE子句结果异常,如何正确排除CAT_COD=10的条目?
SQL查询问题分析与解决
为什么没只移除17条数据?
你写错了过滤条件:你加的WHERE EMP.CAT_COD <> 16是排除所有CAT_COD不等于16的记录,相当于只保留CAT_COD=16的数据,这自然会过滤掉大量其他条目,和你要排除的17条CAT_COD=10的记录完全无关。
另外补充一点:就算你写对条件,最终移除的记录数也可能不是刚好17条——因为原查询是INNER JOIN,这17条CAT_COD=10的记录里,可能有部分在DIM表中没有匹配的关联数据,所以它们本来就没出现在原查询的5,597,154条结果里,实际过滤掉的会是原结果中存在的CAT_COD=10的记录数。
正确排除CAT_COD=10条目的写法
方法一:在WHERE子句中过滤
直接把条件改成排除CAT_COD=10的记录:
SELECT EMP.*, DIM.GENDER FROM Table1 as EMP JOIN Table2 as DIM ON EMP.M_COD=DIM.M_COD AND EMP.ID=DIM.ID WHERE EMP.CAT_COD <> 10;
如果CAT_COD可能为NULL,<>10不会排除NULL值,这时可以写成:
WHERE EMP.CAT_COD <> 10 OR EMP.CAT_COD IS NULL;
或者更明确的写法:
WHERE NOT (EMP.CAT_COD = 10);
方法二:提前过滤EMP表(可能更高效)
在关联前就过滤掉CAT_COD=10的记录,减少关联的数据量:
SELECT EMP.*, DIM.GENDER FROM (SELECT * FROM Table1 WHERE CAT_COD <> 10) as EMP JOIN Table2 as DIM ON EMP.M_COD=DIM.M_COD AND EMP.ID=DIM.ID;
内容的提问来源于stack exchange,提问作者lifeofthenoobie
相关产品推荐
相关产品推荐

