帮我写一个sql,需要先查一张表的一个字段,得到多行用逗号分隔id的字符串,这些字符串有的存放了一个id,有的存放了多个id,拿着这些字符串查另外一张表中符合的id数据
时间: 2024-05-09 15:21:09 浏览: 161
假设第一张表为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字段值。
java用pgsql数据库,表中一个字段是多个字符串按逗号分隔,查询时只要输入的字符串是其中一个就行的sql
在Java中,如果你使用PostgreSQL数据库并且有一个字段存储了多个字符串,比如`tags`字段,这些字符串之间由逗号 `,` 分隔,你可以创建一个SQL查询来查找包含特定字符串的记录。这种场景通常涉及`LIKE`操作或者数组类型的处理,但在PostgreSQL中,我们可以使用`unnest()`函数结合`IN`关键字来达到目的。
假设你的表名为`your_table`,`tags`字段是一个文本型数组,可以这样做:
```sql
SELECT * FROM your_table
WHERE unnest(string_to_array(tags, ',')) = ANY(:search_string);
```
这里,`string_to_array()`函数将逗号分隔的字符串转换成数组,`unnest()`将数组拆开,然后`ANY()`关键字检查给定的搜索字符串是否存在于拆分后的数组中。
如果你想使用占位符避免SQL注入,可以在Java代码里构造SQL语句时替换`:search_string`:
```java
String sql = "SELECT * FROM your_table WHERE unnest(string_to_array(tags, ''')) = ANY(?)";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, searchString); // 将searchString传递给占位符
ResultSet rs = pstmt.executeQuery();
```
阅读全文