mysql中FIND_IN_SET的反向查询怎么实现
时间: 2023-06-30 18:17:22 浏览: 207
如果你想在 MySQL 数据库中对一个字段进行反向查询,即查询该字段不包含某个值的记录,可以使用 `NOT FIND_IN_SET` 函数。
例如,假设你有一个名为 `tags` 的字段,其中包含逗号分隔的标签列表,你想要查询不包含标签 "mysql" 的记录,你可以这样写 SQL 查询语句:
```sql
SELECT * FROM table_name WHERE NOT FIND_IN_SET('mysql', tags);
```
这将返回 `table_name` 表中不包含标签 "mysql" 的所有记录。注意,`NOT FIND_IN_SET` 函数只适用于逗号分隔的列表字段。如果你的字段中包含其他分隔符,你需要使用其他方法来解析它们。
相关问题
mysql 将一个字段值转换成多个值
在MySQL中,如果你想将一个字段的值转换成多个值,可以使用FIND_IN_SET函数、UNION ALL或者CASE表达式结合GROUP_CONCAT函数。以下是几种常见的方法:
1. **FIND_IN_SET**:这个函数检查某个值是否在由逗号分隔的字符串列表中。如果存在,返回该值的索引位置;不存在则返回0。你可以反向操作找出包含特定值的所有记录。
```sql
SELECT * FROM table WHERE FIND_IN_SET('value', column_name);
```
2. **GROUP_CONCAT** 和 CASE:通过CASE表达式将每个符合条件的值放入GROUP_CONCAT的结果,然后选择那些结果中包含特定值的行。
```sql
SELECT id, column_name, GROUP_CONCAT(CASE WHEN value THEN 'value' END) as values_list
FROM table
GROUP BY id
HAVING values_list LIKE '%value%';
```
3. **UNION ALL**:如果你有一个预定义的值列表,可以使用UNION ALL从表中选择所有匹配的行,并合并结果。
```sql
SELECT column_name FROM table WHERE value IN ('val1', 'val2', ...)
UNION ALL
SELECT column_name FROM another_table WHERE value IN ('val1', 'val2', ...);
```
阅读全文