如何从MySQL中选择SET不等于值?

时间:2011-08-08 16:21:37

标签: mysql set

我们遇到了问题,因为这是表格的设置方式。我们如何从一个表中选择一个不包含值的表?如果我们有一个,两个,我们做

SELECT *
FROM table
WHERE column NOT IN('one')

我们仍然会得到那一行。这个的正确语法是什么?

由于

3 个答案:

答案 0 :(得分:1)

尝试:

SELECT *
FROM table
WHERE FIND_IN_SET('one',column) = 0

我做了一些测试:

mysql> CREATE TABLE setTest (s SET('a','b','c','d'));
Query OK, 0 rows affected (0.60 sec)

mysql> INSERT INTO setTest VALUES ('a'),('a,b'),('b'),('a,c'),('c,d');
Query OK, 5 rows affected (0.14 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM setTest;
+------+
| s    |
+------+
| a    |
| a,b  |
| b    |
| a,c  |
| c,d  |
+------+
5 rows in set (0.20 sec)

mysql> SELECT * FROM setTest WHERE FIND_IN_SET('a',s) = 0;
+------+
| s    |
+------+
| b    |
| c,d  |
+------+
2 rows in set (0.12 sec)

mysql> SELECT * FROM setTest WHERE FIND_IN_SET('b',s) = 0;
+------+
| s    |
+------+
| a    |
| a,c  |
| c,d  |
+------+
3 rows in set (0.00 sec)


mysql> SELECT * FROM setTest WHERE FIND_IN_SET('b',s) > 0;
+------+
| s    |
+------+
| a,b  |
| b    |
+------+
2 rows in set (0.04 sec)

答案 1 :(得分:1)

这是有效的:

SELECT *, FIND_IN_SET('hidden', props) As hidden
FROM gt_content
HAVING hidden IS NULL

答案 2 :(得分:0)

来自http://dev.mysql.com/doc/refman/5.0/en/set.html的mysql手册:

通常,使用FIND_IN_SET()函数或LIKE运算符搜索SET值:

  SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;
  SELECT * FROM tbl_name WHERE set_col LIKE '%value%';

第一个语句查找set_col包含值集成员的行。第二个是类似的,但不一样:它找到set_col在任何地方包含值的行,即使是另一个set成员的子串。