2

データベース テーブルの 1 つの列から、多数の値に等しい複数の値を選択したいと考えています。これらの値をすべて一致させたいのですが、それ以外の場合は行が返されません。「IN」は「OR」と同じなので使いたくありません。

以下は、何をすべきかの基本的なモックアップですが、PDO ステートメントで使用したいので、動的である必要があります。データベースに id の 1 と 2 しか含まれていない場合、失敗するはずです。つまり、行が返されません。

SELECT
id
FROM
reports
WHERE
id=1 AND id=2 AND id=3

現在のコードは次のとおりで、誤ってゼロ行を返しています。

SELECT id,title
FROM reports
WHERE id IN (1,2)
GROUP BY title 
HAVING COUNT(DISTINCT id) = 2

私の現在のテーブル構造は次のとおりです: http://www.sqlfiddle.com/#!2/ce4aa/1

4

1 に答える 1

5

HAVING COUNT(id) = 3選択した行に 3 つの ID がすべて含まれていることを確認するために使用する必要があります。何かのようなもの:

SELECT *
FROM reports
WHERE id = 1 OR id = 2 OR id = 3 -- Or id IN(1, 2, 3)
GROUP BY SomeOtherField
HAVING COUNT(DISTINCT id) = 3;

または:

SELECT *
FROM reports
WHERE SomeOtherField IN (SELECT SomeOtherField 
                         FROM reports
                         WHERE id = 1 or id = 2 -- Or id IN(1, 2, 3)
                         GROUP BY SomeOtherField
                         HAVING COUNT(DISTINCT id) = 3
                        );

注意:常に= 1になるため、レコードを取得しないため、他のフィールドをGROUP BY SomeOtherFieldどこにする必要があります。SomeOtherFieldidGROUP BY idHAVING COUNT(id)COUNT(id)

編集:固定WHERE句、OR's の代わりにAND's。

SQL フィドルのデモ

于 2013-01-20T09:25:38.647 に答える