让我说我有3张桌子:
如果不存在 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
任何帮助将不胜感激
谢谢。
答案 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和零或一个价格