我对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工具时,我不知道连接生存期的语义是什么。