-4

私はこれらの2つのテーブルを持っています

  • 個人の詳細( id, name, surname, date_of_birth)
  • 従業員( id, hire_date)

テーブルのhire_date上を+ 10 年に設定する必要があります。employeedate_of_birth

UPDATE employee E
SET E.date_hire = add_months(D.date_of_birth, 120);
FROM employee E, personal_details D
WHERE E.ID = D.ID

それが機能していないのはとても奇妙です。誰かがそこに何かを見ることができますか?

4

4 に答える 4

2

どんな会社が10歳の人を採用し始めているのだろうかと思いますが、大丈夫です。

UPDATE employee E
SET E.date_hire = 
    (SELECT
      add_months(D.date_birth, 120)
    FROM
      personal_details D
    WHERE
      D.ID = E.ID)
于 2012-12-08T10:45:56.710 に答える
1

私はそれをこのように書くでしょう:

UPDATE employee E
SET E.date_hire = COALESCE(
    ( SELECT add_months(D.date_of_birth, 120)
      FROM personal_details D
      WHERE E.ID = D.ID
    ), E.date_hire) ;

またはこれ-私はより直感的だと思います:

UPDATE 
  ( SELECT E.date_hire, add_months(D.date_of_birth, 120) AS new_date_hire
    FROM employee E
      JOIN personal_details D
        ON E.ID = D.ID
  )
SET E.date_hire = new_date_hire ;
于 2012-12-08T10:48:09.753 に答える
0

従業員 (id、雇用日、給与、ボーナス)

SET E.date_hire

列名が一致しません。

于 2012-12-08T10:50:25.067 に答える
0

列名がhire_dateであると言い、date_hireという列を設定します

UPDATE employee E 
SET E.date_hire = add_months(D.date_birth, 120); 

そのステートメントの最後にセミコロンがあります。これは、残りのSQLが個別に扱われることを意味します

SELECT実際にデータを取得するには、を含める必要があります

そのロットをソートすると、あなたはもっと近くなります:-)

(私はSQLを与えるだけではありません)

于 2012-12-08T10:52:12.443 に答える