检查不同表格中的不同价格

时间:2014-04-23 19:38:58

标签: sql sql-server

让我说我有3张桌子:

  1. ITEMS表(有关项目的所有信息)
  2. ITEM_Pricing(同一商品的多个价格)
  3. 特价(如果我们对某些商品或促销活动有特价)
  4. 如果不存在 Item_Pricing 表中的内容,我想构建一个查询以检查价格(如果存在于特价表中),则显示它。换句话说,我想先检查物品是否存在于特价价格表中,如果没有价格,请检查item_pricing表。 这是我试过的,当然没有给出正确的答案

    select T0.itemcode,T0.ItemName,T0.OnHand,T1.price, T2.Price as Special
    from ITEM T0, PRICES T1, S_PRICES T2
    where 
        T0.ItemCode=T1.ItemCode
    and T0.ItemCode=T2.ItemCode
    



    看起来很容易,但我无法弄清楚如何做到这一点?我正在使用sql server 2008 R2 任何帮助将不胜感激
    谢谢。

2 个答案:

答案 0 :(得分:2)

简单的规则:只说"否"在from条款中使用逗号。现在是时候学习显式join语法而不是条件在where子句中的隐式语法。

如果您使用显式连接编写查询,那么答案就是"您需要使用left outer join"。你猜怎么着?当条件在where子句中时,这不容易做到。

select i.itemcode, i.ItemName, i.OnHand, p.price, sp.Price as Special,
       coalesce(sp.Price, p.price) as ThePriceIWant
from ITEM i left outer join
     PRICES p
     on p.itemCode = i.ItemCode left outer join
     S_PRICES sp
     on sp.itemCode = i.ItemCode;

请注意使用coalesce()获取所需价格的逻辑。并使用表缩写作为表别名 - 它们使查询更容易理解。

答案 1 :(得分:2)

沿着这些方向的东西

select      T0.itemcode,T0.ItemName,T0.OnHand,
        IsNull(T2.Price, T1.Price) As Price
from        ITEM as T0
left join   PRICES as T1
        on  T1.ItemCode = T0.ItemCode
left join   S_PRICES as T2
        on  T2.ItemCode = T0.ItemCode

这假设零或一个SpecialPrice和零或一个价格