如果有电子邮件,我需要来自tempfinal和title的所有电子邮件,来自htc的first_name,pea。 不确定以下查询是否正确,因为它需要花费更多时间运行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
答案 0 :(得分: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连接。这将帮助您避免意外的笛卡尔产品(我想这是您当前的问题)
答案 1 :(得分:0)
我认为where子句中的条件或条件基本上是创建交叉连接情况。
试试这个:
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