2012-03-13 38 views
0

我想查询数据库以返回任何行,该行与3列中的可能值列表中的值相匹配。这可能吗?从MySQL中的多列中选择任何一行

我的表有以下几列: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列的每一个可以,和我如果它只包含列表中的值(或更多)的列,则仅返回一行。查询成功执行(无语法错误),但仅返回全部列中存在值的行。

例如:

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

我想查询返回的所有3行,而是它只是作为每一列都包含一个匹配的值返回的第一行。

+0

您试过的查询是否无效?如果是这样的话,它有什么问题? – VeeArr 2012-03-13 19:37:44

+0

如果问题是你只想得到一个结果,那么查询结束时的限制1就可以做到这一点;) – 2012-03-13 19:42:04

+0

感谢你的回应,但我正在按照上面的编辑查找所有行。 – Jason 2012-03-13 19:46:46

回答

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) 
+0

对不起,伙计们。这一直是正确的。感谢艾克和大家的时间! **脸掌** – Jason 2012-03-13 21:13:33

0

如果选用的是“是”,“否”,“也许”和NULL,则此查询应该工作:

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

Downvoter,你是说这个查询不起作用吗? – Ami 2012-03-13 19:59:23

+0

谢谢,但我仍然需要指定一个值来搜索,而不是缺少值。 – Jason 2012-03-13 20:02:47

+0

如果您有四个值,则测试缺少一个值与包含三个值相比更简单。你发现这无用吗? – Ami 2012-03-13 20:06:14