繁体   English   中英

如何根据表 A 中的值将值插入表 B 中的列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM