这类问题令我感到困惑。
我有2个带有货币值的表,我必须从另一个表中找到匹配的值。如果第一个表有一个值(例如10)三次而第二个表有2次,那么我想要的结果需要显示匹配的2个值,并且一个是不匹配的。这是一个多对多的问题。
我已在Google文档https://docs.google.com/document/d/198ZiSGhR6wC2FWNc5Bcr5DTDjx3jCycFq9qlj-eQsEo/edit?usp=sharing
中概述了该问题并在SQL Fiddle中实现它,包括各种失败的尝试。 http://sqlfiddle.com/#!17/80353/1
我更喜欢Postgres,但一般的SQL解决方案没问题。 有人可以帮忙吗?
答案 0 :(得分:1)
使用窗口函数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