我有两个表:具有公共物品ID键的物品和价格。关系是一个:很多,所以一个项目可以有很多价格。
价格表包含以下列:
itemID
priceType
price
我想要做的是通过其他列之一选择一个项目,通过项目ID加入价格表,并根据以下标准提取价格:
-if PriceType='primary' then price
-if PriceType='alternate' then price (no primary price is set)
-if PriceType='other' then price (no primary or alternate price is set)
基本上,如果未定义主要价格,请抓住次要价格,依此类推。我只想要返回一行,无论有多少PriceTypes,我想指定单个项目的返回顺序。
答案 0 :(得分:1)
LEFT JOIN
的{{1}}表也可以做到这一点,如下所示:
price
我首先想到的替代方案就像是
SELECT item.*, coalesce(pp.price, ap.price, op.price) as price
FROM item
LEFT JOIN price pp ON pp.itemId = item.itemId AND pp.priceType = 'primary'
LEFT JOIN price ap ON ap.itemId = item.itemId AND ap.priceType = 'alternate'
LEFT JOIN price op ON op.itemId = item.itemId AND op.priceType = 'other';
哪个更丑,我相信会比第一个例子更糟糕。