0

電話番号の列を返す 2 つの mysql クエリがあります。私は、一方のリストにある電話番号のリストを取得しようとしていますが、もう一方のリストにはありません。

したがって、私が持っている2つのクエリは次のとおりです。

SELECT phone
FROM civicrm_phone phone
LEFT JOIN civicrm_participant participant 
    ON phone.contact_id = participant.contact_id
WHERE phone.is_primary = 1
    AND participant.id IS NULL

SELECT phone
FROM civicrm_phone phone
LEFT JOIN civicrm_participant participant 
    ON phone.contact_id = participant.contact_id
WHERE phone.is_primary = 1
    AND participant.id IS NOT NULL

誰かが尋ねる前に、上記の 2 つのクエリは相互に排他的な結果を提供しません (最後の WHERE ステートメントに IS NULL と IS NOT NULL を使用することに基づく)。必然的にすべてにparticipant.idがあります。

助けてくれてありがとう。

4

1 に答える 1

4

次のクエリは、比較のために 2 番目のクエリを WHERE 句に入れます。

SELECT phone
FROM civicrm_phone phone
LEFT JOIN civicrm_participant participant ON phone.contact_id = participant.contact_id
WHERE phone.is_primary = 1
AND participant.id IS NULL and
    not exists (SELECT 1
                FROM civicrm_phone phone2
                LEFT JOIN civicrm_participant participant ON phone2.contact_id = participant.contact_id
                WHERE phone.is_primary = 1
                      AND participant.id IS NULL
                      and phone2.phone = phone.phone
              )

通常、SQL ではこれに NOT IN を使用しますが、MySQL では相関サブクエリを使用した NOT EXISTS の方が効率的です。

于 2012-09-14T15:40:17.953 に答える