テーブルから製品を選択するクエリがあります。商品には、複数の価格 (さまざまな価格を考えてください) とデフォルトの価格を設定できます。
当然、これは一対多の関係です。特定の価格またはデフォルト価格 (相互排除を意味する) を持つ製品を選択する必要があります。これは、個別のクエリと 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.
編集:このクエリを使用することになりました。これは、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