paroxit:
私は、クエリの下に持っています。
SELECT * FROM product pr
LEFT OUTER JOIN product_field_value pfv ON pfv.product_id = pr.id AND pfv.product_field_id = 64
INNER JOIN product_colour pc ON pc.id = pfv.value
今、いないすべての製品は、product_field_valueに対応しています
ON pfv.product_id = pr.id AND pfv.product_field_id = 64
しかし、中に対応する行を持っているものproduct_field_value
の表は、インナーに参加する必要がありますproduct_colour
も。
しかし、あなたが想像通りINNER JOIN
にproduct_colour
した後、テーブルLEFT OUTER JOIN
にproduct_field_value
テーブル、DOES NOT HAVEのものフィルタアウトproduct_field_value
関係を。
私はこのソリューションを作ってみたので、
SELECT * FROM product pr
LEFT OUTER JOIN (SELECT colourPfv.name as name,pfv.product_id as productId,pfv.product_field_id as productFieldId FROM product_field_value pfv
INNER JOIN product_colour colourPfv on pfv.value = colourPfv.id) colourRel ON colourRel.productId = pr.id AND colourRel.productFieldId = 64
そして、このクエリが返すの両方product_field_value、それら持っていることに対応していないもの。
しかし、最新のクエリのパフォーマンスが遅すぎます。
これを行うには良い方法はありますか?
GMB:
あなたがにロジックを移動した場合どのようなWHERE
句、パフォーマンスが良いですか?
SELECT * FROM product pr
LEFT JOIN product_field_value pfv
ON pfv.product_id = pr.id AND pfv.product_field_id = 64
LEFT JOIN product_colour pc ON pc.id = pfv.value
WHERE pfv.product_id IS NULL OR (pfv.product_id IS NOT NULL AND pc.id IS NOT NULL)