我有一个从表中选择产品的查询。产品可以有多个价格(考虑各种价格)和默认价格。SQL中的互斥值
当然,这是一对多的关系。我需要选择具有给定价格或默认价格的产品 - 这意味着相互排斥。我知道这可以通过单独的查询和WHERE(NOT)IN子句或union声明来完成,但我确信一个更优化的方式必须是可能的。我的查询目前看起来是这样的:
SELECT products.*, products_prices.price
FROM products RIGHT JOIN
products_prices ON (products.id = products_prices.productId)
WHERE products_prices.businessId = ?
OR products_prices.businessId IS NULL // this needs to become mutual.
编辑:我结束了使用此查询,这是戈登·利诺夫的一个稍作修改的版本:
SELECT distinct p.*, coalesce(pp.price, defpp.price)
FROM products p LEFT JOIN
products_prices pp
ON p.id = pp.productId and pp.businessId = ? left join
products_prices defpp
on p.id = defpp.productId and defpp.businessId is NULL
不,我不明白。也许一个例子会说明问题。 – Strawberry 2013-03-20 14:19:10
你说“给定价格”,但价格似乎不是一个参数..除非'businessId'是价格? – 2013-03-20 14:20:49
对不起,你说得对,没有给出价格。我的意思是说,具有不为NULL的businessId的产品记录优先于不具有重复性的产品(考虑到有一个businessId对每个产品都为NULL的记录) – QuintenVK 2013-03-20 14:27:16