这种类型的问题一直困扰着我。
我有2个具有货币值的表,我必须从另一个表中找到匹配值。如果第一个表的值(例如10)三次,而第二个表具有2次,则我想要的结果需要显示2个匹配的值,而一个值是无与伦比的。这是一个多对多的问题。
我在Google doc https://docs.google.com/document/d/198zisghr6wc2fwnc5bcr5bcr5bcr5dtdjx3jcycfq9q9qlj-eqlj-eqseo/Edit?usp=sharing
sharing sharing sharing并在SQL小提琴中实现了它,包括各种失败的尝试。http://sqlfiddle.com/#!17/80353/1
我更喜欢Postgres,但是通用的SQL解决方案可以。有人可以帮助吗?
使用窗口函数 row_number
和完整的加入
select a.id_a, coalesce(a.value, b.value), b.id_b
from
(
select *, row_number() over (partition by value order by id_b) rn
from b
) b
full join
(
select *, row_number() over (partition by value order by id_a) rn
from a
) a on b.value = a.value and
b.rn = a.rn
sqlfiddle demo