update formtable_main_157 set spr=(SELECT string_agg(a1.lastname,',') FROM ( SELECT a.requestid, a.userid, b.lastname lastname FROM workflow_currentoperator a JOIN hrmresource b ON a.userid=b.id WHERE a.requestid=$requestid$ and a.nodeid=484 ) as a1 ) where requestid=$requestid$ 检查这个语句的错误并改正
时间: 2024-01-02 18:02:30 浏览: 201
这个 SQL 语句看起来是更新 `formtable_main_157` 表中的 `spr` 字段,其中 `spr` 字段的值应该是从 `workflow_currentoperator` 和 `hrmresource` 两个表中查询得到的。其中,`workflow_currentoperator` 表中记录了流程中当前操作者的信息,`hrmresource` 表中记录了人员信息。具体来说,SQL 语句的实现思路是:
1. 查询 `workflow_currentoperator` 表中 `requestid` 值为 `$requestid$`,`nodeid` 值为 `484` 的所有记录,得到这些记录的 `userid` 列表。
2. 根据 `userid` 列表,查询 `hrmresource` 表中对应的 `lastname` 列表。
3. 将 `lastname` 列表中的所有值拼接成一个字符串,并将该字符串更新到 `formtable_main_157` 表中 `requestid` 值为 `$requestid$` 的记录的 `spr` 字段中。
根据上述描述,可以尝试修改 SQL 语句如下:
```
UPDATE formtable_main_157
SET spr = (
SELECT string_agg(b.lastname, ',')
FROM workflow_currentoperator a
JOIN hrmresource b ON a.userid = b.id
WHERE a.requestid = $requestid$ AND a.nodeid = 484
)
WHERE requestid = $requestid$;
```
这里使用了 `JOIN` 语句将 `workflow_currentoperator` 表和 `hrmresource` 表连接起来,同时使用了 PostgreSQL 特有的 `string_agg` 函数来将 `lastname` 列表中的值拼接成一个字符串。
阅读全文