1

我需要所有来自 tempfinal 和 title 的电子邮件,来自 htc 的 first_name,如果有电子邮件的话。不确定以下查询是否正确,因为它需要更多时间 10 分钟才能运行。使用 'AND' 而不是 'OR' 只给了我 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 回答