我希望从表中选择数据,当且仅当唯一的手机号码等于表中的总行数(即我们没有两个不同的人使用相同的手机号码,和/或我们没有在手机号码列中有一行为空值),其中有一个特定的区号,例如4817。
目前,我有以下查询(不适用于 AND 约束)。有没有人有关于如何做到这一点的任何提示?
SELECT
MOB_NUM AS MOBILE_NUMBER,
NAME AS NAME,
AREA_CODE AS AREA_CODE
FROM DB_PHONEBOOK DBP
WHERE DBP.AREA_CODE = 4817
AND (COUNT(DISTINCT DBP.MOB_NUM ) = COUNT(DBP.MOB_NUM))
最佳答案
使用 Where
子句过滤单个行/记录,其中像 count/Sum/Average/.. 这样的组使用 Having
子句过滤
如果没有错,你正在寻找这样的东西
SELECT DBP.MOB_NUM AS MOBILE_NUMBER,
DBP.NAME AS NAME,
DBP.AREA_CODE AS AREA_CODE
FROM DB_PHONEBOOK DBP
INNER JOIN (SELECT MOB_NUM
FROM DB_PHONEBOOK DBP
WHERE DBP.AREA_CODE = 4817
GROUP BY MOB_NUM
HAVING Count(DISTINCT DBP.MOB_NUM) = Count(DBP.MOB_NUM)) C_DBP
ON DBP.MOB_NUM = C_DBP.MOB_NUM
WHERE DBP.AREA_CODE = 4817