2016-09-15 45 views
-1

所以我有一個可以被稱爲下表的情況:查詢爲1對多表

TABLE A      TABLE B   TABLE C 
ID TOTAL_PRICE ORDER_ID  ID   ID ORDER ID 
1 10   101    101   1001 101 
2 20   101    103   1002 101 
3 25   103       1003 103 
4 10   103       1004 103 

所有這些表我很期待這個結果:

EXPECTED OUTPUT   
ID TOTAL_PRICE ORDER_ID ID 
1 10    101 1001 
2 20    101 1002 
3 25    103 1003 
4 10    103 1004 

而且我得到的結果如下:

REAL OUTPUT   
ID TOTAL_PRICE ORDER_ID ID 
1 10    101 1001 
1 10    101 1002 
2 20    101 1001 
2 20    101 1002 
3 25    103 1003 
3 25    103 1004 
4 10    103 1003 
4 10    103 1004 

我的SQL如下,我使用SQL甲骨文:

SELECT a.id, a.total_price, a.order.id, c.id 
FROM a,b,c 
WHERE a.order_id=b.id AND b.id=c.order_id 

有了這種情況,我該如何解決問題才能獲得預期的輸出?謝謝。

+1

請更好地解釋您預期的結果背後的邏輯;例如,total_price = 25的記錄具有ID爲1003和1004(表C)的order_id,那麼爲什麼只需要1003? – Aleksej

回答

1

對於給定匹配表格條件的表a中的每一行,似乎您希望從表c分配一個id。爲此,您可以使用row_number枚舉內表ac你行,然後分別分配行號這樣的信息:

select 
    a.id, a.total_price, a.order_id, c.id 
from (select *, row_number over (partition by order_id order by id) as rn from a) a 
join b on a.order_id = b.id 
join (select id, order_id, row_number over (partition by order_id order by id) as rn from c) on b.id = c.order_id 
where a.rn = c.rn 
+0

是的。這是我正在尋找的。非常感謝 – user3120873