2012-03-13 55 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