订单表 orders
--order_type 1:正常订单;3:退货订单
id order_type order_no
1 1 P001
2 3 R001 --订单P001第1次退货订单
3 3 R002 --订单P001第2次退货订单
4 1 P002
5 3 R003 --订单P002第1次退货订单
6 3 R004 --订单P002第2次退货订单
7 3 R005 --订单P002第3次退货订单出货单表 ships
Id ship_no order_no
1 S001 P001 --订单P001正常出货
2 S002 R001 --订单P001第1次退货订单出货
3 S003 R002 --订单P001第2次退货订单出货
4 S004 P002 --订单P002正常出货
5 S005 R003 --订单P002第1次退货订单出货
6 S006 R004 --订单P002第2次退货订单出货
7 S007 R005 --订单P002第3次退货订单出货退货单表 returns
id return_no ship_no
1 R001 S001 --订单P001第1次退货
2 R002 S002 --订单P001第2次退货
3 R003 S004 --订单P002第1次退货
4 R004 S005 --订单P002第2次退货
5 R005 S006 --订单P002第3次退货现在要求查询所有订单的退货情况,按原始订单也能查询到退货订单的出货与退货情况,
即P001是主订单,退货订单R001,R002是从订单,输入主订单P001,要能查出包含从订单R001,R002在内的所有订单出货与退货的情况,
要怎样建立这种主从订单的关系?说白了,就是要计算客人下的订单经过出货与退货,究竟最终出了多少货给客人。。
謝謝大俠的建議~
的確,我們的orders表設計不好。。
我是做二次開發的,表的架構設計不能作大的改變了,只能在現有的基礎上作些努力。。
那么出货单就是主表,出货的每一个产品明细资料放在出货单子表;
主表(出货单ID,出货日期,操作人)主键:出货单ID
子表(出货单ID,序号,订单ID,产品编号,出货数量,重量,金额.....)主键:出货单ID,序号退货单也是类似的设计
即P001是主订单(原始訂單),退货订单R001,R002(為原訂單P001的退貨單號,退貨回來以退貨單號為訂單號輸入一張新的訂單,但性質是退貨訂單),输入主原始订单P001,要能查出包含(退货订单)R001,R002在内的相關订单出货与退货的情况。下面是我的查詢SQL,雖然能達到我的目的,但是效率太低了,能否有更高效的方法?
SELECT * FROM orders
where order_no='P001'
OR
order_no IN
(SELECT r.return_no
FROM returns r, ships sh,orders s
WHERE s.order_no= 'P001'
AND r.ship_no= sh.ship_no
AND s.order_no=sh.order_no)
)