Oracle中 我有一张表 表的内容为通告标题,通知到的部门id,通知到的角色id,通知到的用户id,部门id和角色id和用户id内容不能同时存在 如何查询对应的用户id按逗号分割打印到用户id字段
时间: 2024-05-03 13:17:34 浏览: 46
可以使用Oracle的字符串聚合函数`LISTAGG`来实现将多行数据按照某个字段进行聚合,并且用分隔符连接起来。
假设你的表名为`notification`,包含三个字段`title`、`dept_id`、`role_id`、`user_id`,可以使用如下SQL语句来查询对应的用户id并用逗号分割打印到`user_id`字段:
```sql
UPDATE notification
SET user_id = (
SELECT LISTAGG(user_id, ',') WITHIN GROUP (ORDER BY user_id)
FROM (
SELECT user_id
FROM notification
WHERE dept_id IS NULL AND role_id IS NULL
UNION ALL
SELECT user_id
FROM notification
WHERE role_id IS NULL AND user_id IS NOT NULL
UNION ALL
SELECT user_id
FROM notification
WHERE dept_id IS NULL AND user_id IS NOT NULL
)
)
WHERE dept_id IS NULL AND role_id IS NULL AND user_id IS NULL;
```
此SQL语句的思路是将三种情况分别查询要聚合的用户id,然后再将这三个结果集合并起来,最后用`LISTAGG`函数将所有用户id聚合成一个字符串,并用逗号分割。
其中,`WITHIN GROUP (ORDER BY user_id)`表示按照用户id进行排序,`UNION ALL`表示将三个结果集合并,`UPDATE`语句中的`WHERE`条件表示只更新符合条件的记录,即部门id、角色id和用户id都为空的记录。
阅读全文