订单表 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在内的所有订单出货与退货的情况,
要怎样建立这种主从订单的关系?说白了,就是要计算客人下的订单经过出货与退货,究竟最终出了多少货给客人。。

解决方案 »

  1.   

    你的 orders 表这样设计不好,建议把订单和退货分开存储.
      

  2.   


    謝謝大俠的建議~
    的確,我們的orders表設計不好。。
    我是做二次開發的,表的架構設計不能作大的改變了,只能在現有的基礎上作些努力。。
      

  3.   

    出货单也要设计为主从表关系,意思是一张出货单可以出货多个产品;一张订单可以分为多次出货;
    那么出货单就是主表,出货的每一个产品明细资料放在出货单子表;
    主表(出货单ID,出货日期,操作人)主键:出货单ID
    子表(出货单ID,序号,订单ID,产品编号,出货数量,重量,金额.....)主键:出货单ID,序号退货单也是类似的设计
      

  4.   

    现在要求查询所有订单的退货情况,按原始订单也能查询到退货订单的出货与退货情况, 
    即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) 
            )