1

メールが存在する場合、htc,pea からの tempfinal と title,first_name からのすべてのメールが必要です。実行に10分以上かかるため、以下のクエリが正しいかどうかはわかりません。「OR」の代わりに「AND」を使用すると、正しくない 4 行しか表示されません。アドバイスしてください

SELECT f.email_address,
       isnull(htc.TITLE, pea.title)           TITLE,
       isnull(htc.FIRST_NAME, pea.FIRST_NAME) FIRST_NAME,
FROM   #tempFinal F,
       htc,
       pea
WHERE  f.EMAIL_ADDRESS = htc.EMAIL_ADDRESS
        OR f.EMAIL_ADDRESS = pea.EMAIL_ADDRESS 
4

2 に答える 2

1

これを試して:

    SELECT  F.EMAIL_ADDRESS,
            ISNULL(H.TITLE,P.TITLE) TITLE,
            ISNULL(H.FIRST_NAME,P.FIRST_NAME) FIRST_NAME
    FROM #tempFinal F
    LEFT JOIN htc H
        ON F.EMAIL_ADDRESS = H.EMAIL_ADDRESS
    LEFT JOIN pea P
        ON F.EMAIL_ADDRESS = P.EMAIL_ADDRESS 

明示的な ANSI 結合を使用する代わりに、暗黙的な結合の使用を停止する必要があります。これは、偶発的なデカルト積を回避するのに役立ちます(現在の問題だと思います)

于 2013-05-30T16:11:54.077 に答える
0

where句のor条件は、基本的にクロス結合の状況を作り出していると思います。

これを試して:

SELECT f.email_address,
       isnull(htc.TITLE, pea.title)           TITLE,
       isnull(htc.FIRST_NAME, pea.FIRST_NAME) FIRST_NAME,
FROM   #tempFinal F
       Left Join htc
        on f.EMAIL_ADDRESS = htc.EMAIL_ADDRESS
       Left Join pea
        on f.EMAIL_ADDRESS = pea.EMAIL_ADDRESS 
于 2013-05-30T16:07:15.443 に答える