具有多对多关系的SQL Join表

时间:2019-01-25 19:29:27

标签: sql oracle

我有2个具有多对多关系的表。第一个表的每个item_ids都有唯一的order_numbers,属于另一个表中的几个item_group's。 第二个表是包含不同不同item_group's组的item_ids(不同)的项目的主表。一个item_id's可以属于多个item_group's,反之亦然。

我已经尝试使用ROWID函数进行多个联接,但似乎无法解决问题。

ORDER_NUMBER   ITEM_ID    ITEM_GROUP    ITEM_ID
order_1          1         group_1        1
order_1          2         group_2        1
order_1          3         group_1        2
order_1          4         group_2        2
                           group_1        3                             
                           group_2        4
                           group_3        4
具有所有匹配order_number

item_ID's必须包含item_group。如果不是,则它必须返回item_id并且与名为item_group的列中的new_items不匹配。由于这是多对多关系,因此,join会创建重复项,并且无法提供我想要的内容。我希望得到以下结果:

ORDER_NUMBER    NEW_ITEMS
order_1            group_1
order_1                 4

1 个答案:

答案 0 :(得分:0)

如果我正确理解,以下查询可以帮助您解决问题。

SELECT T1.ORDER_NUMBER, IG.ITEM_GROUP, T1.ITEM_ID
FROM T1
CROSS JOIN (SELECT DISTINCT ITEM_GROUP FROM T2) IG
LEFT JOIN T2
  ON IG.ITEM_GROUP = T2.ITEM_GROUP AND T1.ITEM_ID = T2.ITEM_ID
WHERE T2.ITEM_GROUP IS NULL

输出:

+--------------+------------+---------+
| ORDER_NUMBER | ITEM_GROUP | ITEM_ID |
+--------------+------------+---------+
| order_1      | group_3    |       3 |
| order_1      | group_3    |       2 |
| order_1      | group_2    |       3 |
| order_1      | group_3    |       1 |
| order_1      | group_1    |       4 |
+--------------+------------+---------+

https://rextester.com/AVTY7615上查看