我的数据库是sql server.
  有四个表:1、商品库存(仓库编号,商品编号,库存数量)
       2、仓库(仓库编号,仓库名称),
       3、商品信息(商品编号,商品名称)
       4、订单作业(订单编号,仓库编号,商品编号,订单数量).
  现在我想查询订单编号为DD001的订单明细,并且要返回如下字段:
  (仓库名称,商品编号,商品名称,订单数量,库存数量)
   请问这样的查询如何用一条SQL语句,如果一条不行,那应该如何办呢?

解决方案 »

  1.   

    select b.仓库名称,a.商品编号,d.商品名称,a.订单数量,c.库存数量
    from 订单作业 a left join 仓库 b on  a.仓库编号 = b.仓库编号
    left join 商品库存 c on a.仓库编号 = c.仓库编号
    left join 商品信息 d on a.商品编号 = d.商品编号
      

  2.   

    select 
       (select 仓库名称 from [仓库] where 仓库编号=A.仓库编号) as 仓库名称,
       商品编号,
       (select 商品名称 from [商品信息] where 商品编号=A.商品编号) as 商品名称,
       订单数量,
       (select 库存数量 from [商品库存] where 仓库编号=A.仓库编号 and 商品编号=A.商品编号) as 库存数量
    from
    [订单作业] A
    where
       订单编号='DD001'
      

  3.   

    select a.仓库名称,b.商品编号,b.商品名称,c.订单数量,d.库存数量 from  订单作作业 c join 仓库 a on c.仓库编号=c.仓库编号 join 商品信息 b on b.商品编号=c.商品编号 join 商品库存 d on c.商品编号=d.商品编号
      

  4.   

    select a.仓库名称,b.商品编号,b.商品名称,c.订单数量,d.库存数量 from  订单作作业 c join 仓库 a on c.仓库编号=a.仓库编号 join 商品信息 b on b.商品编号=c.商品编号 join 商品库存 d on c.商品编号=d.商品编号
      

  5.   

    select a.仓库名称,b.商品编号,b.商品名称,c.订单数量,d.库存数量 from  订单作作业 c,仓库 a,商品信息 b,商品库存 d where c.仓库编号=a.仓库编号 and b.商品编号=c.商品编号 and c.商品编号=d.商品编号
      

  6.   

    使用频率比较高的话用视图会好些;
    另外,where后面的条件排列顺序会在很大程度上影响到查询的效率,
    这个要根据表中数据的具体情况进行排列,让匹配可能相对较小的条件放在前面,
      

  7.   

    to  unsigned(僵哥):
      如果我在商品信息中多了一个成本价字段,那我应该如何写呢?
      

  8.   

    回复人: yxzake(白河) 
    那种的执行效率更好?
    若这种查询多的话,建立视图怎样支持!
      

  9.   

    同意
    回复人: meiqingsong(阿飛) ( ) 信誉:111 
    ------------>
    to  unsigned(僵哥):
      如果我在商品信息中多了一个成本价字段,那我应该如何写呢?
    -------------->
    多寫一個字段咯select b.仓库名称,a.商品编号,d.商品名称,a.订单数量,c.库存数量,d.成本價
    from 订单作业 a left join 仓库 b on  a.仓库编号 = b.仓库编号
    left join 商品库存 c on a.仓库编号 = c.仓库编号
    left join 商品信息 d on a.商品编号 = d.商品编号另外我覺得你訂單那個表,倉庫編號這個字段是多余的。
      

  10.   

    我觉得用unsigned(僵哥):所说的办法比较好一点!