タイトルがどういうわけか意味があることを願っています。
DBに3つのテーブルがあります。1つ目はproduct_variant
レコードを保持し、2つ目はlabel
レコードを保持し、3つ目はref
その間のテーブルです。
product_variant
:(id、productId、serviceProviderId)。label
:(id、label)。product_variant_label_ref
:(label_id、variant_id)。
クエリの入力パラメータは次のとおりです。productType
、serviceProviderId
およびラベルのセット。私の目的はproduct_variant
、入力パラメータに基づいてテーブル内の行を選択することです。
これは、休止状態のxmlファイルでの私のクエリです。
SELECT v.*
FROM product_variant v
INNER JOIN product_variant_label_ref r ON v.id = r.variant_id
INNER JOIN product_product p ON p.productType = :productType
INNER JOIN product_label l ON l.id = r.label_id
WHERE v.product_id = p.id
AND v.serviceprovider_id = :serviceProviderId
AND l.label in (:labels)
問題は、IN
演算子を使用すると、選言的なOR
選択AND
が行われ、その間に必要なことです。入力として異なるラベルを指定する場合、product_variant
refテーブルを介してそれらすべてに関係がある行のみが必要です。入力ラベルの1つがいずれにも属していない場合product_variant
、クエリは何も返さないはずです。誰かが私のクエリを変更するのを手伝ってもらえますか?