2017-07-07 8 views
4

一意のモバイル番号がテーブルの行の総数と等しい場合にのみ、テーブルからデータを選択したいとします(つまり、および/または携帯電話番号の列にヌル値の行がない場合)、特定の市外局番がある場合4817.Oracle plsql 2つのカウントが等しい場合の選択方法

現在のところ、私はクエリの蛇腹を持っています(これは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

個々の行/レコードが間違っていないよあなたがこの

ような何かを探している場合は、カウント/合計/平均/ ..のようなグループが Having

を使用してフィルタリングされているようWhere句を使用してフィルタリングされています

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'を選択できません。これら2つの結果が必要ない場合は、内側の選択クエリを使用するだけです –

関連する問題