【发布时间】:2017-03-07 23:19:03
【问题描述】:
我有一张带有订单-供应商关系的普通表。它显示了哪些供应商参与了哪个订单。显然,一个订单可以有多个供应商:
+---------+------------+
| 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?
例如在这种情况下,不会选择 ID 为 O_1 的订单,因为没有 (S_1, S_3) 或 (S_3, S_1) 对,但会选择 O_2,因为它的至少两个供应商有一对 (S_1和 S_2)。
所以基本上我需要按 OrderId 对第一个表进行分组,然后从第二个表中选择每个订单供应商列表中至少包含一对的订单。
【问题讨论】:
-
是否有任何列可用作“排序依据”?
标签: sql sql-server