帮我写一个sql,需要先查一张表的一个字段,得到多行用逗号分隔id的字符串,这些字符串有的存放了一个id,有的存放了多个id,拿着这些字符串查另外一张表中符合的id数据
时间: 2024-05-09 10:21:09 浏览: 140
假设第一张表为table1,字段为field1,第二张表为table2,符合的id数据为id:
```
SELECT id FROM table2 WHERE id IN (
SELECT DISTINCT unnest(string_to_array(field1, ',')) FROM table1
)
```
解释:`string_to_array(field1, ',')`将以逗号分隔的字符串转换为一个数组,`unnest()`将数组拆开成多行数据,`DISTINCT`去重,最后通过`IN`子句查询符合条件的id。
相关问题
帮我写一个MySQL的sql,需要先查一张表的一个字段,得到多行用逗号分隔id的字符串,这些字符串有的存放了一个id,有的存放了多个id,拿着这些字符串查另外一张表中符合的id数据
假设第一张表名为table1,查询的字段名为column1;第二张表名为table2,查询的字段名为column2,可以使用如下的SQL语句:
```
SELECT column2 FROM table2 WHERE FIND_IN_SET(column2, (SELECT GROUP_CONCAT(column1) FROM table1)) > 0;
```
解释一下:
1. `SELECT GROUP_CONCAT(column1) FROM table1`:查询table1中column1字段的值,并使用GROUP_CONCAT函数将多条记录的值用逗号连接成一个字符串。
2. `FIND_IN_SET(column2, ...)`:使用FIND_IN_SET函数查找table2中的column2字段值是否在第一步查询出的字符串中存在。
3. `> 0`:如果存在,则返回非零值,表示符合条件,否则返回0,表示不符合条件。
4. 最终的查询结果是table2中所有符合条件的记录的column2字段值。
数据库一行数据中某个字段是逗号拼接的多个字符串如何按逗号切割后变成多行数据
可以使用 SQL 的内置函数 `STRING_SPLIT` 来实现按逗号切割字符串,并将结果转换成多行数据。
例如,假设有一张表 `my_table`,其中包含一个名为 `my_field` 的字段,其值为逗号分隔的多个字符串:
```
my_field
--------
apple,banana,orange
grape,kiwi
```
要将每个逗号分隔的字符串转换成一行数据,可以使用以下 SQL 语句:
```
SELECT value AS my_field
FROM my_table
CROSS APPLY STRING_SPLIT(my_field, ',')
```
上述语句会将 `my_field` 字段按逗号切割成多个字符串,然后使用 `CROSS APPLY` 将切割后的字符串转换成多行数据,最终结果如下:
```
my_field
--------
apple
banana
orange
grape
kiwi
```