我对SQL还是很陌生,现在只知道基本命令。我试图基于表“工资”中列“薪水”的值来获取表“角色”中列“位置”的值。
表“角色”和“薪资”包含三个具有公用值的公用列“ employee_ID”,“ first_name”和“ last_name”。我想使用表“工资”中的另一列“薪水”来确定表“角色”中列“位置”的输出。
例如,如果表“工资”中的“工资”列的值小于2000,则我希望表“角色”中的“职位”列显示“管理员”。
这就是我正在使用的。
update role
set position = 'janitor'
where (select salary from payroll) > 2000
这就是我得到的错误。
#1242-子查询返回的行数超过1
我非常感谢您的帮助。
分析解答
通过查询执行UPDATE
时为MySQL不使用FROM
关键字。
MySQL语法是这个(square-brackets中的部分是可选的,angle-brackets中的部分是占位符):
UPDATE <table_references>
SET <assignment_list>
[WHERE <where_condition>]
-- <table_references> is defined as:
tableName1 [ AS <alias1> ] [ <join_operator> tableName2 [ AS <alias2> ] ON <join_criteria> ] [...]
所以试试这个:
UPDATE
role AS r
INNER JOIN payroll AS p ON p.employee_id = r.employee_id
SET
position = 'janitor'
WHERE
p.salary > 2000
另一种方法是将temporary-table与WHERE IN
谓词一起使用:
CREATE TEMPORARY TABLE employeeIds ( employeeId int NOT NULL );
INSERT INTO employeeIds ( employeeId )
SELECT employee_id FROM payroll WHERE salary > 2000;
UPDATE
role
SET
position = 'janitor'
WHERE
employee_id IN ( SELECT employee_id FROM employeeIds );
当您与数据库断开连接时,临时表employeeIds
将被删除-我假设您使用的是MySQL Workbench或类似工具。但是,当使用像phpMyAdmin这样的web-based工具时,我不知道连接生存期的语义是什么。