2016-04-13 13 views
0

最初に私にはSQLの言語と英語の初心者です。 だから私はこのクエリに問題があります。mysqlの高度なクエリは、パラメータに基づいて選択します

私はsqlfiddleを作成しました。 それが正常に動作していますが、私はそれが私が

正しいクエリ結果は次のようになり送信しますパラメータに基づいて、プロダクトIDのバリアントを返すクエリを書きたい

が動作していない見つけるように私のクエリが見えます私は一つだけattributevalue_idを送信する場合、次の私は、本当に必要なもの

PARAM = 6 

id product_id productvariant_id attributevalue_id 

1  3    1      6 
2  3    2      6 
---- BAD RESULTS ----- 
3  3    3      6 
4  3    3      9 
6  3    5      6 
7  3    6      6 
8  3    6     11 

PARAM = 6,9 

id product_id productvariant_id attributevalue_id 

3  3    3     6 
4  3    3     9 
---- BAD RESULTS ----- 
3  3    3     6 
4  3    3     9 
6  3    5     6 
7  3    6     6 
8  3    6     11 

が挿入されたのparamsの組み合わせが含まれているproductvariant_idを返すで、私はONE attributevalue_idが含まれているproductvariantを見つける必要があります。私は2つのパラメータを2つ送信すると、2つの組み合わせが見つかりました。それ以上ではありません。

答えて

0

残念ながら私はコメントとして十分な評判がないので、答えとして書く必要があります。 あなたの目標を明確にできますか?

attributevalue_idがパラメータと一致するすべてのデータセットのproductvariant_idを取得しますか?

SELECT productvariant_id 
FROM productvariantattribute 
WHERE attributevalue_id IN ($YOUR_PARAMETER_LIST); 

それともproductvariant_idあなたは、パラメータとして指定された唯一のこれらのattributevalue_idsを持っているすべてのデータセットのproductvariant_idを取得したいですか?

SELECT `productvariant_id` 
FROM `productvariantattribute` 
WHERE `attributevalue_id` IN ($YOUR_PARAMETER_LIST) 
AND `productvariant_id` NOT IN (
    SELECT `productvariant_id` 
    FROM `productvariantattribute` 
    WHERE `attributevalue_id` NOT IN ($YOUR_PARAMETER_LIST) 
) 
関連する問題