假设我们有 3 个名为TRANSACTIONS
,的表ORDERS
,PAYMENTS
它们都有TRANSACTION_ID
.
这是我加入有 5 个订单和 3 个付款的交易时得到的常规输出:
transaction_id, order_id, payment_id
----------
1, 20, 35
1, 20, 36
1, 20, 37
1, 21, 35
1, 21, 36
1, 21, 37
....
我应该得到的是:
transaction_id, order_id, payment_id
----------
1, 20, 35
1, 21, 36
1, 22, 37
1, 23, null
1, 24, null
如果付款多于订单,则应NULL
在order_id
列中。
基本上我需要每行数transaction_id
等于orders
/的更大数量payments
(在这个例子中5> 3所以5)。
请记住,这些表中的每一个都有几百万条记录。
编辑:
根据评论中的请求,上面的查询是简单的连接
SELECT t.transaction_id, o.order_id, p.payment_id
FROM TRANSACTION t
LEFT JOIN ORDERS o on o.transaction_id = t.transaction_id
LEFT JOIN PAYMENTS p on p.transaction_id = o.transaction_id
编辑 2:
我不能透露全表方案,我只写了查询工作所必需的列。实际上,这些表中的每一个都有 20 多列,并且查询应该返回总共大约 20 列。同样,TRANSACTIONS
有超过 1 亿条记录,并且两者ORDERS
都有15 亿多PAYMENTS
条记录,我们需要返回大约 10 万条记录。