我需要选择那些在其中具有相同产品的订单。 ORDER_ITEMS
包含产品和外键以引用父ORDER
行。订单行需要不同。
我已经设法列出了对数,它们中有多少匹配的产品,但这只是相似数。我需要从包含不同产品的货币对中排除订单。
可以在其中包含Oracle特定内容。
这两个表是:
Order(order_id, customer_id...)
Order_Item(item_id, order_id FK, product_id,...)
我需要使用order_id -s,其所有Order_Item子项都匹配product_id -s。
实施例。在订单
{ (ord1, cust1)
(ord2, cust2)}
和Order_Items
{ (item1, ord1, product_id=3),
(item2, ord1, product_id=6),
(item3, ord2, product_id=3),
(item4, ord2, product_id=6) }
所以基本上,两个人买了两件完全相同的东西。他们是一对。那些订购产品不完全匹配的订单未列出。
答案 0 :(得分:2)
你还没有指定db版本,所以我假设11g - 未经测试,但我认为它会给你一般的想法:
SELECT * FROM (
WITH qry AS (
SELECT DISTINCT
order_id
,LISTAGG(product_id,'+')
WITHIN GROUP (ORDER BY product_id)
AS order_signature
FROM order_items
GROUP BY order_id)
SELECT order_id
,order_signature
,COUNT(DISTINCT order_id)
OVER (PARTITION BY order_signature)
count_same
FROM qry
) WHERE count_same > 1;
限制:如果某些订单非常大,它将无法工作,例如100或1000个产品ID。
答案 1 :(得分:0)
我不确定你的最终数据集是什么样的,但是在WHERE子句中选择带有EXISTS表达式的客户来查找订单匹配将会帮助你。