我有一個從表中選擇產品的查詢。產品可以有多個價格(考慮各種價格)和默認價格。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