从MySQL中的多个列中选择ANY

时间:2012-03-13 19:36:13

标签: mysql

我想查询数据库以返回任何行,该行匹配3列中可能值列表中的值。这可能吗?

我的表格包含以下列:id,ans1,ans2,ans3

这是我对查询的尝试:

SELECT * 
FROM table 
WHERE 
  ans1 IN ("Yes", "No", "Maybe") OR 
  ans2 IN ("Yes", "No", "Maybe") OR 
  ans3 IN ("Yes", "No", "Maybe");

3列可以都是 null ,如果它包含 one 中列表("Yes","No","Maybe)中的值,我只想返回一行(或者更多)的列。查询成功执行(没有语法错误),但仅返回所有列中存在值的行。

例如:

INSERT INTO table 
 (ans1,ans2,ans3)
VALUES
 ("Yes","No","Maybe"),
 (null,"Yes",null),
 (null,null,"Yes");

我希望查询返回所有3行,但它只返回第1行,因为每列都包含匹配值。

2 个答案:

答案 0 :(得分:1)

这不是一个答案,但是评论太长了。

您的查询应该完全按照您希望的方式工作。

以下是您的查询示例,包含您的数据,执行您希望它执行的操作。

那么问题是什么?

mysql> create table your_table (
    ->   ans1 varchar(10) null,
    ->   ans2 varchar(10) null,
    ->   ans3 varchar(10) null
    -> );
Query OK, 0 rows affected (0.13 sec)

mysql> 
mysql> INSERT INTO your_table (ans1,ans2,ans3) VALUES ('Yes','No','Maybe'),(null,'Yes',null),(null,null,'Yes');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> 
mysql> SELECT * 
    -> FROM your_table 
    -> WHERE 
    ->   ans1 IN ('Yes', 'No', 'Maybe') OR 
    ->   ans2 IN ('Yes', 'No', 'Maybe') OR 
    ->   ans3 IN ('Yes', 'No', 'Maybe');
+------+------+-------+
| ans1 | ans2 | ans3  |
+------+------+-------+
| Yes  | No   | Maybe |
| NULL | Yes  | NULL  |
| NULL | NULL | Yes   |
+------+------+-------+
3 rows in set (0.00 sec)

答案 1 :(得分:0)

如果选项为“是”,“否”,“可能”和NULL,则此查询应该有效:

SELECT *
FROM table
WHERE ans1 IS NOT NULL
  OR ans2 IS NOT NULL
  OR ans3 IS NOT NULL