2017-03-07 6 views
0

私はオーダー - サプライヤの関係を持つプレーンなテーブルを持っています。どのサプライヤーがどのオーダーに参加したかを示します。明らかに、1件の注文が複数のサプライヤ持つことができます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)のペアは存在しないので、O_1は選択されませんが、少なくとも2つのサプライヤがペアを持つためO_2が選択されますS_1とS_2)。

基本的に私はOrderIdによって最初のテーブルをグループ化し、各注文サプライヤリストに2番目のテーブルの少なくとも1つのペアが含まれている注文を選択する必要があります。

+0

'order by'として使用する列はありますか? – McNets

答えて

1

一つの方法は、2つの結合を使用:

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; 

は、これが問題の論理を反転します。最初にペアを考え、各サプライヤーと同じ順序を持つペアを考えてみましょう。

関連する問題