2013-05-27 74 views
1

假設我有 產品:使用列連接第二臺

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

您正在查找術語表中的一行,而不是全部。這樣做的一個方法是使用相關子查詢:

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; 
+0

@Andomar。 。 。固定。 –

+0

[在SQL小提琴示例。](http://sqlfiddle.com/#!12/ee68f/3/1) – Andomar

+0

我結束了使用第一個選項!非常感謝你! – hectorviov

相關問題