1

ここに画像の説明を入力

上記のデータベースが提供されます。

私は EmployeeGood Employeeと別の Employeeを持っていExcellent Employeeます。Excellent 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

Employeeクエリから、「works_at」関係が列の下のテーブルに格納されているように見えますDepartment。「実行」関係をどのようにモデル化しているのかわかりません。Employeeを実行する人がDepartmentその部門でも働く必要があると仮定しましょう。したがって、「優秀な従業員」がどの部門で働いているかを見つけることができます。

エクセレントが勤務している部門を見つけるには、次のクエリを使用できます。

SELECT Department FROM Employee WHERE Name = 'Excellent Employee'

したがって、グッドをエクセレントの部門に移動するには、それを 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 に答える