加入Coalesce(Formula1,Formula2,Formula3)

时间:2013-06-20 21:33:09

标签: mysql join coalesce

使用MySQL,我正在尝试JOIN类似于将JOINOR语句一起使用的方式,如:

JOIN bioguide ON (bioguide.fulldistrict=house.districtname) OR
(left(bioguide.firstname,3)=left(house.first,3) AND bioguide.lastname=house.last) OR
(bioguide.fulldistrict=house.districtname AND bioguide.lastname=house.last)

正如您可能知道的那样,这样做的问题在于,如果一堆不同的方法有效,那么每行会得到多个结果。

我希望有一种方法可以使用JOIN并以COALESCE函数的工作方式使用它,基本上说明(即使它不起作用):

JOIN bioguide ON COALESCE(bioguide.firstname=house.first AND
bioguide.lastname=house.last),(left(bioguide.firstname,3)=left(house.first,3) AND
bioguide.lastname=house.last),(bioguide.fulldistrict=house.districtname AND
bioguide.lastname=house.last))

如果有效,它会告诉SQL JOIN (bioguide.firstname=house.first AND bioguide.lastname=house.last)然后(left(bioguide.firstname,3)=left(house.first,3) AND bioguide.lastname=house.last)等等。

这样的事情可能吗?如果其他信息有用,请告诉我。

谢谢大家!

1 个答案:

答案 0 :(得分:0)

您可以使用不同表格中的不同匹配来构建查询,然后在选择中使用coalesce()来获得您想要的内容:

select coalesce(bg1.col1, bg2.col2, bg3.col3)
from . . . left outer join
     bioguide bg1
     on bg1.fulldistrict=house.districtname left outer join
     bioguide bg2
     on left(bg2.firstname,3)=left(house.first,3) AND bg2.lastname=house.last left outer join
     bioguide bg3
     on bg3.fulldistrict=house.districtname AND bg3.lastname=house.last

如果其中一个比较存在多个匹配项(如果bioguide中的同一行与所有三个匹配,那么这仍然会导致多行),对于重复的行没有问题。

如果是这样,那么明智地使用group by

group by <id column that identifies each row in the result set>