我有两个字段,其中#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