![](/img/trans.png)
[英]How to insert values into table based off values of another table in SQL?
[英]How to insert values into a column in table B based on values in table A
我对 SQL 还很陌生,现在只知道基本命令。 我正在尝试根据“工资单”表中“工资”列的值来获取“角色”表中“职位”列的值。
表 'role' 和 'payroll' 包含三个公共列 'employee_ID'、'first_name' 和 'last_name' 和公共值。 我想使用表“工资”中的另一列“工资”来确定表“角色”中“职位”列的 output。
例如,如果表 'payroll' 中的 'salary' 列的值小于 2000,我希望表 'role' 中的 'position' 列显示 'janitor'。
这就是我正在使用的。
update role
set position = 'janitor'
where (select salary from payroll) > 2000
这是我得到的错误。
#1242 - 子查询返回多于 1 行
我真的很感激一些帮助。
从查询执行UPDATE
时, MySQL 不使用FROM
关键字。
MySQL 语法是这样的(方括号中的部分是可选的,尖括号中的部分是占位符):
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
另一种方法是使用带有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 的工具时,我不知道连接生命周期语义是什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.