我想从数据库表中的单个列中选择多个值,这些值等于多个值。我希望所有这些值都匹配,否则它不应该返回任何行。我不想使用“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
您必须使用
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;
或:
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
);
注意: 你必须
GROUP BY SomeOtherField
其中 SomeOtherField
是 id
的其他字段,因为如果你 GROUP BY id
与 HAVING COUNT(id)
你不会得到任何记录,因为 COUNT(id)
将始终 = 1 .
编辑:固定
WHERE
条款,OR
的而不是AND
的。
你也可以尝试关注
SELECT *
FROM reports
GROUP BY SomeOtherField
HAVING COUNT(DISTINCT id) = 3
and id IN(1, 2, 3)