SQL - 连接结果的条件返回

时间:2016-03-17 19:26:58

标签: mysql

我有两个表:具有公共物品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,我想指定单个项目的返回顺序。

1 个答案:

答案 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';

哪个更丑,我相信会比第一个例子更糟糕。