我有一个从表中选择产品的查询。一个产品可以有多个价格(考虑各种价格)和一个默认价格。
当然,这是一对多的关系。我需要选择具有给定价格或默认价格的产品 - 这意味着互斥。我知道这可以通过单独的查询和 WHERE (not) IN 子句或联合语句来完成,但我相信必须有更优化的方法。我的查询目前如下所示:
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.
编辑:我最终使用了这个查询,它是 Gordon Linoff 的稍微修改过的版本:
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