sql join与嵌套的where子句

时间:2016-06-27 07:43:58

标签: sql sql-server join

我在尝试连接两个表时遇到问题,我的样本表如下

订单表(Odr)

Order_No Item No  Order_Type  Req_Qty
100        A          2        45
101        B          1        32
102        F          2        23
103        A          4        23
104        C          3        14
105        B          5        43

物品位置表(Loc)

Item_No   Location       Qty
A            X           100
A            Y           200
B            X           150
B            Y            50
C            X            75
C            Y           150
F            X           250
F            Y            60

我想看到的是,位置X的每个订单类型1,2和3的数量以及Req_Qty大于0的订单的数量 如下,

Order_No Item No  Order_Type  Req_Qty X_Qty
100        A          2        45     100
101        B          1        32     150
102        F          2        23     250
104        C          3        14     75

现在我为此写了一个类似下面的查询,但我觉得它没有给我正确的结果

select Odr.*, Loc.Qty
from Odr 
inner JOIN Loc
ON Odr.ITEM_no = Loc.ITEM_no
where (SOPTYPE = '1' and Req_Qty >0
 or SOPTYPE = '2' and Req_Qty >0
 or SOPTYPE = '3' and Req_Qty >0) AND Loc.Location = 'X' 
如果这是获得我想要的结果的正确方法

,有人可以请求为我检查

感谢

1 个答案:

答案 0 :(得分:1)

查询看起来很好。但你可以让它更具可读性:

select Odr.*, Loc.Qty
from Odr 
inner JOIN Loc
ON Odr.ITEM_no = Loc.ITEM_no
where (SOPTYPE = '1' or SOPTYPE = '2' or SOPTYPE = '3') 
  and Req_Qty > 0 
  and Loc.Location = 'X' 

select Odr.*, Loc.Qty
from Odr 
inner JOIN Loc
ON Odr.ITEM_no = Loc.ITEM_no
where SOPTYPE IS IN('1', '2', '3') 
  and Req_Qty > 0 
  and Loc.Location = 'X'