0

私はこのクエリを実行しようとしていますが、なぜそれが機能しないのか誰かが助けてくれますか?

SELECT DISTINCT (p.fld_tag_id) 
FROM tbl_tag_properties as p 
WHERE 3 = (SELECT count(c.fld_tag_id) 
FROM tbl_tag_properties as c 
WHERE c.fld_tag_category_value_id in (67, 20, 48) 
and c.fld_tag_id = p.fld_tag_id) 
AND p.fld_tag_category_value_id IN (55, 56) 
AND p.fld_tag_category_value_id IN (74, 75)

その間 ....

このクエリは、最終的に単一のAND演算子で正しく実行されていますが、複数のAND演算子が必要です。

SELECT DISTINCT (p.fld_tag_id) 
FROM tbl_tag_properties as p 
WHERE 3 = (SELECT count(c.fld_tag_id) 
FROM tbl_tag_properties as c 
WHERE c.fld_tag_category_value_id in (67, 20, 48) 
and c.fld_tag_id = p.fld_tag_id) 
AND p.fld_tag_category_value_id IN (55, 56) 
4

3 に答える 3

4

ID を 1 つの範囲に制限してから、別の範囲で ID を再度制限するにはどうすればよいでしょうか? ;) 色を黒く白くしたいようなものですandin色を(BLACK、WHITE)にしない限り不可能です。逆に色=or黒 色=白.... 簡単に説明するために色の例を挙げました。

最初のクエリでこれを試してください:

AND p.fld_tag_category_value_id IN (55, 56, 74, 75)

ここで自己結合を行っていますが、それは何WHERE 3 =のために行うのでしょうか? テーブルスキーマが与えられたときに期待される出力を簡単に伝えることができれば、それははるかに優れていたでしょう.

返されるレコードを 3 に制限する場合は、 を使用しますLIMIT。次のサンプルを見て、本当に必要なものをお知らせください。:) 喜んで理解し、お手伝いします。

*SQLFIDDLE

于 2012-12-03T13:18:34.753 に答える
2

あなたの2AND行は相互に排他的です:

AND p.fld_tag_category_value_id IN (55, 56) 
AND p.fld_tag_category_value_id IN (74, 75)

55, 56あなたの値は、74, 75同時に入ることはできません。

試す :

SELECT DISTINCT (p.fld_tag_id) 
FROM tbl_tag_properties as p 
WHERE 3 = (SELECT count(c.fld_tag_id) 
FROM tbl_tag_properties as c 
WHERE c.fld_tag_category_value_id in (67, 20, 48) 
AND c.fld_tag_id = p.fld_tag_id) 
AND p.fld_tag_category_value_id IN (55, 56, 74, 75)

OR 演算子の場合:

SELECT DISTINCT (p.fld_tag_id) 
FROM tbl_tag_properties as p 
WHERE 3 = (SELECT count(c.fld_tag_id) 
FROM tbl_tag_properties as c 
WHERE c.fld_tag_category_value_id in (67, 20, 48) 
AND c.fld_tag_id = p.fld_tag_id) 
AND (p.fld_tag_category_value_id IN (55, 56)
    OR p.fld_tag_category_value_id IN (74, 75))

そうすれば、必要な方法でクエリを作成できます。ただし、括弧を忘れないでください。

于 2012-12-03T13:19:14.000 に答える
1

最後の AND は、すべての可能な値を保持する必要があります。失敗した理由を説明するために、 と仮定しp.fld_tag_category_value_id = 55ます。次に、クエリで最初に AND ie

AND p.fld_tag_category_value_id IN (55, 56) // Will evaluate to TRUE

は true になりますが、2 番目の AND 条件は FALSE になります。これは、1 つの値で AND 条件の両方を満たすことができないためです。

AND p.fld_tag_category_value_id IN (74, 75) // Will evaluate to FALSE

以下で試してみるとうまくいきます。

....
AND p.fld_tag_category_value_id IN (55, 56, 74, 75) 
于 2012-12-03T13:19:44.730 に答える