1

在此处输入图像描述

上面给出了数据库。

我有一个 EmployeeGood Employee和另一个 Employee Excellent EmployeeExcellent Employee经营一个部门。

我想更新我的数据库,以便Good Employee在由Excellent Employee

有可能做这样的事情吗?

UPDATE Employee
SET Department = (
  SELECT AID
 FROM Department
 WHERE AID = Department AND Employee.Name = 'Excellent Employee')
WHERE Name = 'Good Employee' LIMIT 1;

(上面的说法不成立)

4

2 回答 2

0

这绝对是可能的。你有一个很好的开始。正确的部分是:

  • 你在Employee哪里更新Name='Good Employee'
  • 您正在选择Department.AID

从您的查询来看,“works_at”关系似乎存储在Employee列下的表中Department。我不知道你是如何建模“运行”关系的。让我们假设Employee一个Department必须在该部门工作的人。因此,我们可以找到“优秀员工”在哪个部门工作。

要查找优秀工作所在的部门,我们可以使用以下查询:

SELECT Department FROM Employee WHERE Name = 'Excellent Employee'

因此,要将 Good 转移到Excellent 的部门,我们可以将其放入 UPDATE 中:

UPDATE Employee 
SET Department = (
    ...
) WHERE Name = 'Good Employee'

不幸的是,MySQL 有一些怪癖,所以我们需要改变我们的子查询来解决这个问题:

UPDATE Employee 
SET Department = (
    SELECT X.Department FROM (SELECT * FROM Employee) as X WHERE X.Name = 'Excellent Employee'
) WHERE Name = 'Good Employee'

这是一个展示它的小提琴:http ://sqlfiddle.com/#!2/b68bb/2

于 2013-06-30T21:16:29.023 回答
0

不确定你到底在做什么,但这里是在 MySQL 中使用 join 进行更新的基本语法:

UPDATE FROM EmployeeAS e
 LEFT JOIN Department as dept
 ON e.? = dept.?
   AND e.Name = 'Good Employee' 
 SET e.Department = dept.AID
于 2013-06-30T20:21:05.000 回答