2017-07-07 59 views
4

當且僅當唯一的移動號碼等於表中的行總數時,我希望從表中選擇數據(即,我們沒有兩個不同的人使用相同的手機號碼,和/或我們沒有在手機號碼列中有空值的行),其中有一個特定的區號,例如4817.Oracle plsql如何選擇兩個計數是否相等

目前,我有以下查詢(它不適用於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)) 

回答

2

各行/記錄使用Where條款過濾哪裏像數組/點心/平均/ ..使用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 
+0

不知道你爲什麼要使用'INNER JOIN',但指出'HAVING'確實有幫助!謝謝! – Captainslow

+0

@Captainslow - 沒有'INNER JOIN',你不能選擇'NAME'和'AREA_CODE'。如果你不想要這兩個結果,那麼你只需使用內部選擇查詢 –