我想过滤一个表中的一列用于几个值,并且仅当所有这些值都存在时才显示结果。如果缺少一个或多个,则返回零结果。
示例表
+----+--------+----------+
| id | Fruit | Color |
+----+--------+----------+
| 1 | apple | red |
| 2 | mango | yellow |
| 3 | banana | yellow |
+----+--------+----------+
示例“错误”代码:(这必须返回3行)
select Fruit FROM table WHERE Color = red AND Color = yellow
但
select Fruit FROM table WHERE Color = red AND Color = green
必须返回0行。
(如果我使用select Fruit FROM table WHERE Color = red OR Color = green
我得到1行,这不是我需要的)
我正在使用带有表单的PHP,其中用户检查表示同一列的不同值的不同复选框。因此,当他选择多个复选框时,所有这些值都应该在结果集中,否则不应该给出结果。
谢谢,
安德鲁
答案 0 :(得分:3)
试试这个:
SELECT Fruit
FROM yourtable
WHERE Color IN ('red', 'yellow')
AND (
SELECT COUNT(DISTINCT Color)
FROM yourtable
WHERE Color IN ('red', 'yellow')
) = 2
另一种选择:
SELECT Fruit FROM yourtable
WHERE Color IN ('red', 'yellow')
AND EXISTS (SELECT NULL FROM yourtable WHERE Color = 'red')
AND EXISTS (SELECT NULL FROM yourtable WHERE Color = 'yellow')