如何在mysql中选择多个一对多关系

时间:2018-07-14 23:54:34

标签: mysql

我有以下一系列表格

Items - contains all items
Purchase_order - 1:m purchased_items
purchased_items - 1:m receipts
receipts - 1:m received_items
recieved_items - 1:m shipments
shipments - 1:m shipped items

我需要列出所有采购订单的完整详细信息,因为purched_order中包含了purched_items,而这些又有多行收据,依此类推。但是所有的采购订单可能没有收据,收据可能没有e.t.c的所有项目,因此我尝试使用LEFT JOIN开始的purchase_order并移至上述订单中。问题是,一个有6个项目的purchase_order将产生6个重复的receipt,而每个重复将产生多个重复的received_items行,依此类推...

我知道group by无法解决此问题,请向我指出正确的方向。

购买顺序:

id | name
----------
1  | po1

Puchased_items

id | purchase_order_id | item_id
--------------------------------
1  | 1                 | 1
2  | 1                 | 4
3  | 1                 | 5
4  | 1                 | 6

收据

id | name | purchase_order_id
------------------------------
1  | rc01 | 1
2  | rc02 | 1

Received_items

id | receipt_id | item_id
--------------------------------
1  | 1          | 1
2  | 1          | 4
3  | 2          | 5
4  | 2          | 6

发货

id | name | receipt_id
------------------------------
1  | shp01 | 1
2  | shp02 | 1
3  | shp03 | 2
4  | shp04 | 2

Shipped_items

id | shipment_id | item_id
--------------------------------
1  | 1          | 1
2  | 2          | 4
3  | 3          | 5
4  | 4          | 6

预期产量

purchase_order_item | purchase_order | receipt | shipment
----------------------------------------------------------
1                   | po1            | rc01    | shp01
2                   | po1            | rc01    | shp02
3                   | po1            | rc02    | shp03
4                   | po1            | rc02    | shp04

0 个答案:

没有答案