使用MySQL,我正在尝试JOIN
类似于将JOIN
与OR
语句一起使用的方式,如:
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)
等等。
这样的事情可能吗?如果其他信息有用,请告诉我。
谢谢大家!
答案 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>