使用第一个表中的列作为连接第二个表的条件

时间:2013-05-27 17:08:57

标签: sql postgresql

假设我有 产品:

folio   price     quantity
1      100.00       1
1      450.00       2
3      150.00       1
4      600.00       2

条款:(了解根据产品价格的付款条款数量)

level    term
0.01       12
100.00     14
200.00     16
300.00     18
400.00     20
500.00     22

如何获得这样的结果表:

folio    price    quantity     term
1        100.00   1            14
1        450.00   2            20

我尝试过使用:

SELECT a.*, b.term 
FROM products AS a 
JOIN terms AS b ON b.level <= a.price 
WHERE a.folio = 1

但我最终得到了:

folio price   quantity   term
1     100.00  1          12
1     100.00  1          14
1     450.00  2          12
1     450.00  2          14
1     450.00  2          16
1     450.00  2          18
1     450.00  2          20

我能做什么,所以我只得到最大的一行?请帮忙!

1 个答案:

答案 0 :(得分:1)

您正在寻找条款表中的一行,而不是所有这些行。一种方法是使用相关子查询:

SELECT p.*,
       (select t.term from terms t where p.price >= t.level order by t.level desc limit 1
       ) as term
FROM products p 
WHERE p.folio = 1;

如果您可以修改条款表以获得最低和最高价格,那么这将使用户更容易。

并且,您可以使用lead()函数模仿:

select p.*, t.term
from products p left outer join
     (select t.*, lead(level) over (order by level) as nextlevel
      from terms t
     ) t
     on p.price >= t.level and (p.price < t.nextlevel or t.nextlevel is null)
where p.folio = 1;