0

使用 MySQL,我正在尝试执行JOIN类似于使用JOINwithOR语句的方式,例如:

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 先JOINon(bioguide.firstname=house.first AND bioguide.lastname=house.last)然后 on (left(bioguide.firstname,3)=left(house.first,3) AND bioguide.lastname=house.last),等等。

这样的事情可能吗?请让我知道其他信息是否会有所帮助。

谢谢大家!

4

1 回答 1

0

您可以使用不同表中的不同匹配来构造查询,然后coalesce()在 select 中使用以获取所需的内容:

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匹配所有三个,则重复行没有问题)。

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

group by <id column that identifies each row in the result set>
于 2013-06-20T21:42:47.747 回答