我有兩個字段,其中#data表中的電子郵件地址正在嘗試加入。我希望它加入代表電子郵件地址,如果這不起作用,我希望它加入電子郵件。我試着運行下面的查詢:更有效的寫查詢方式
select a.*
from #data a
join #email b on b.email=coalesce(a.rep_email_address,a.email)
where a.rep_email_address<>a.email
然而,這並不工作,因爲在a.rep_email_adress不爲空,但不b.email匹配的情況下,將丟棄記錄,而不是採取a.email字段。
這是變通,我發現:
select a.*
from #data a
join #email b on a.email=b.email
except
select a.*
from #data a
join #email b on a.rep_email_address=b.email
union
select a.*
from #data a
join #email b on a.rep_email_address=b.email
where a.rep_email_address<>a.email
然而,這是很不理想的,所以我wondering-任何方式來寫這個有更好的表現/看起來更乾淨或更簡單?爲了澄清這個查詢的工作原理(第二個查詢),我想知道是否有更好的方法來編寫它。
謝謝!
您需要澄清問題是否在列爲null或者在兩種情況下都可以填充它們,並且您想要加入。 – scsimon
我說這個問題不是說a.rep_email_adress是null(它不是) - 但只是與b.email不匹配;然而,a.email字段確實如此,所以如果rep_email_address沒有加入(不是因爲它是空的,而是根本沒有加入),我想要加入郵件字段。 – edost4
嗯,喲在這種情況下說,但這並不明確,它可能是和/或不能爲null,但謝謝澄清 – scsimon