从单列中选择多个值

Nuv*_*ari 2 mysql sql select

我想从等于多个值的数据库表中的单个列中选择多个值。我希望所有这些值都匹配,否则它不应该返回任何行。我不想使用“IN”,因为它等于“OR”。

以下是它应该做什么的基本模型,但它需要是动态的,因为我希望将它与 PDO 语句一起使用。如果数据库只包含 id 的 1 和 2,它应该失败,即不返回任何行。

SELECT
id
FROM
reports
WHERE
id=1 AND id=2 AND id=3
Run Code Online (Sandbox Code Playgroud)

我有以下当前代码,它错误地返回零行:

SELECT id,title
FROM reports
WHERE id IN (1,2)
GROUP BY title 
HAVING COUNT(DISTINCT id) = 2
Run Code Online (Sandbox Code Playgroud)

我目前的表结构如下:http : //www.sqlfiddle.com/#!2/ce4aa/1

Mah*_*mal 5

您必须使用HAVING COUNT(id) = 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;
Run Code Online (Sandbox Code Playgroud)

或者:

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
                        );
Run Code Online (Sandbox Code Playgroud)

请注意:您必须到GROUP BY SomeOtherFieldwhereSomeOtherField是其他字段,id因为如果您GROUP BY idHAVING COUNT(id)您在一起,您将不会获得任何记录,因为COUNT(id)将始终 = 1。

编辑: fixedWHERE子句,OR's 而不是AND's。

SQL 小提琴演示