2017-03-07 73 views
0

我有一個包含訂單 - 供應商關係的普通表。它顯示哪些供應商參與了哪個訂單。顯然,一個訂單可以有多個供應商:SELECT其中組包含來自另一個表的值

+---------+------------+ 
| OrderId | SupplierId | 
+---------+------------+ 
| O_1  | S_1  | 
+---------+------------+ 
| O_1  | S_3  | 
+---------+------------+ 
| O_2  | S_1  | 
+---------+------------+ 
| O_2  | S_2  | 
+---------+------------+ 
| O_2  | S_999  | 
+---------+------------+ 

而且我有一個包含對這樣的供應商(輸入數據)另一個表:

+--------------+--------------+ 
| SupplierId_1 | SupplierId_2 | 
+--------------+--------------+ 
| S_1   | S_2   | 
+--------------+--------------+ 
| S_2   | S_3   | 
+--------------+--------------+ 

需要注意的是對是唯一的,所以如果有( S_1,S_2)對不會有(S_2,S_1)對。但是不可能說出這對貨幣將以何種順序出現:它可以以(S_1,S_2)或(S_2,S_1)的形式出現,但不能同時出現。

如何從這些配對獲得供應商訂單的ID?

例如,在這種情況下,由於沒有(S_1,S_3)或(S_3,S_1)對,因此至少有兩個供應商有一對( S_1和S_2)。

所以基本上我需要通過OrderId對第一個表進行分組,並選擇訂單,其中每個訂單提供商列表至少包含一個來自第二個表的對。

+0

是否有任何列用作'order by'? – McNets

回答

1

一種方法使用兩個連接:

select o1.orderid, p.supplierid_1, p.supplierid_2 
from pairs p join 
    orders o1 
    on o1.supplierid = p.supplierid_1 join 
    orders o2 
    on o2.supplierid = p.supplierid_2 and 
     o2.orderid = o.orderid; 

這在反轉的問題的邏輯。首先考慮配對,哪些配對與每個供應商具有相同的順序。

相關問題