Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用另一个表的条件更新时发生SQL Update查询错误_Mysql_Sql_Where Clause - Fatal编程技术网

Mysql 使用另一个表的条件更新时发生SQL Update查询错误

Mysql 使用另一个表的条件更新时发生SQL Update查询错误,mysql,sql,where-clause,Mysql,Sql,Where Clause,我有3个具有以下架构的表: 任命增值税医生、日期、时间戳、描述、增值税客户 VAT_医生:FK医生 增值税客户:FKclient 员工增值税、姓名、出生日期、街道、城市、邮政编码、IBAN、工资 博士、专业、传记、电子邮件增值税:FKemployee 我想做一个SQL更新查询,更改所有医生的工资医生是2019年有1次以上预约的专业化员工。新的工资应该比旧的工资增加5% 我已经用多种方法尝试过了,但总是会出现错误,比如操作数应该包含1列 UPDATE employee SET salary =

我有3个具有以下架构的表:

任命增值税医生、日期、时间戳、描述、增值税客户 VAT_医生:FK医生 增值税客户:FKclient

员工增值税、姓名、出生日期、街道、城市、邮政编码、IBAN、工资

博士、专业、传记、电子邮件增值税:FKemployee

我想做一个SQL更新查询,更改所有医生的工资医生是2019年有1次以上预约的专业化员工。新的工资应该比旧的工资增加5%

我已经用多种方法尝试过了,但总是会出现错误,比如操作数应该包含1列


UPDATE employee
SET salary = salary*1.05
where VAT in (
SELECT a.VAT_doctor, COUNT(a.VAT_doctor) AS count, e.VAT, e.salary
FROM appointment a

LEFT JOIN employee e on e.VAT = a.VAT_doctor


WHERE (EXTRACT(year from a.date_timestamp) IN ('2019'))
GROUP BY a.VAT_doctor
HAVING count > 1
);


如果我理解正确,您可以在更新中使用join来执行您想要的操作:

update employee e join
       (select a.vat_doctor
        from appointment a
        where a.date_timestamp >= '2019-01-01' and
              a.date_timestamp < '2020-01-01'
        group by a.vat_doctor
        having count(*) >= 2  -- more than one appointment
       ) a
       on a.vat_doctor = e.vat 
    set salary = salary * 1.05;
我认为不需要医生表,除非预约可以将vat_医生引用为非医生。

参见: