FIND_IN_SET 不想要某一个值,而是全部字段的值
时间: 2023-07-08 15:50:16 浏览: 184
如果你不是想查询包含某个特定值的记录,而是想查询不包含特定值的记录,可以使用 MySQL 中的 `NOT FIND_IN_SET` 函数。这个函数与 `FIND_IN_SET` 函数的功能相反,它可以在一个逗号分割的字符串中查找一个指定的值,并返回其位置的相反值。因此,你可以使用 `NOT FIND_IN_SET` 函数来查询不包含指定值的记录。例如,如果你有一个名为 `tags` 的字段,其中包含逗号分割的多个标签,你可以使用以下语句来查询不包含标签 "tag1" 的记录:
```
SELECT * FROM table_name WHERE NOT FIND_IN_SET('tag1', tags);
```
这个语句将返回所有不包含标签 "tag1" 的记录。如果你想要查询不包含多个标签的记录,可以在 WHERE 子句中使用多个 `NOT FIND_IN_SET` 函数,例如:
```
SELECT * FROM table_name WHERE NOT FIND_IN_SET('tag1', tags) AND NOT FIND_IN_SET('tag2', tags);
```
这个语句将返回所有不包含标签 "tag1" 和 "tag2" 的记录。
相关问题
FIND_IN_SET 和 in 的性能
FIND_IN_SET和IN都是用于查询数据的函数,但是它们的性能是有区别的。一般来说,如果使用IN和FIND_IN_SET都能满足条件,则最好使用IN,特别是查询字段为主键时或有索引时。因为使用IN时会使用索引,只会查询表中部分数据,而FIND_IN_SET则会查询表中全部数据,由于数据量比较大,性能肯定不高。如果使用IN不能满足功能需求,那只能使用FIND_IN_SET了。想查看查询部分还是全部,可以使用EXPLAIN即解释功能查看,如果是部分则type为range(范围),全部则type为ALL(全部),还有个type是const,常量级的。总之,使用IN比FIND_IN_SET性能高,但是如果IN不能满足需求,就只能使用FIND_IN_SET了。
MYSQL FIND_IN_SET函数
MySQL中的FIND_IN_SET函数用于在一个逗号分隔的字符串列表中查找一个字符串,并返回它在列表中的位置。该函数的语法如下:
```
FIND_IN_SET(str, strlist)
```
其中,str是要查找的字符串,strlist是逗号分隔的字符串列表。如果找到了str,则返回它在strlist中的位置,否则返回0。
例如,假设有以下数据:
```
id | name | tags
---|------|-----
1 | Tom | 1,3,5
2 | Jack | 2,4
3 | Lucy | 1,2,5
```
现在想要查找所有包含标签1的记录,可以使用FIND_IN_SET函数:
```
SELECT * FROM table_name WHERE FIND_IN_SET('1', tags) > 0;
```
这将返回id为1和3的记录,因为它们的tags字段包含1。注意,由于FIND_IN_SET函数返回的是位置,而不是布尔值,所以需要使用大于0的比较运算符来判断是否找到了字符串。
阅读全文