UPDATE salary SET checkoff = ( SELECT new.checkoff FROM withhold left JOIN employee ON new.emp_lev = employee.emp_lev where employee.salarycard = salary.salarycard ) WHERE EXISTS (SELECT salarycard FROM employee WHERE employee.salarycard = salary.salarycard and new.emp_lev = employee.emp_lev ) 出现查询结果不唯一的错误
时间: 2024-03-26 19:42:10 浏览: 69
这个错误是因为在子查询中返回了多个结果。你可以尝试在子查询中使用聚合函数,如SUM()或AVG(),来确保只返回一个结果。例如:
```
UPDATE salary SET checkoff = (
SELECT SUM(new.checkoff) FROM withhold
LEFT JOIN employee ON new.emp_lev = employee.emp_lev
WHERE employee.salarycard = salary.salarycard
)
WHERE EXISTS (
SELECT salarycard FROM employee
WHERE employee.salarycard = salary.salarycard AND new.emp_lev = employee.emp_lev
)
```
这个查询将返回 withhold 表中新雇员等级的所有扣款的总和,然后将其更新到 salary 表中的 checkoff 列。注意,这个查询仅更新符合条件的行,因为使用了 WHERE EXISTS 子句。
相关问题
update salary set reduce=dedu.reduce where dedu.id= any(select employee.id from employee where new.salarycard =employee.salarycard)
这个 SQL 语句的作用是将 employee 表中的员工的薪资卡号为 new.salarycard 的员工的扣除金额更新到 salary 表中对应的记录中的 reduce 字段中。
但是这个 SQL 语句中的问题在于子查询中的 select 语句中没有包含 dedu 表,因此在子查询中无法引用 dedu.id 这个列。你需要修改子查询的 SQL 语句,使其能够正确地引用 dedu 表,例如:
```
UPDATE salary
SET reduce = (
SELECT dedu.reduce
FROM dedu
INNER JOIN employee ON dedu.id = employee.id
WHERE employee.salarycard = new.salarycard
)
WHERE EXISTS (
SELECT 1
FROM employee
WHERE employee.salarycard = new.salarycard
AND salary.employee_id = employee.id
)
```
这个 SQL 语句使用了 INNER JOIN 将 dedu 表和 employee 表连接起来,并且在 WHERE 子句中过滤出薪资卡号为 new.salarycard 的员工,然后将 dedu.reduce 更新到 salary 表中对应的记录中的 reduce 字段中。同时通过 EXISTS 子句来过滤出与 employee 表中薪资卡号为 new.salarycard 的员工关联的 salary 表中的记录,从而避免了一些不必要的更新操作。
阅读全文