-4

我有这两张桌子

  • 个人详细信息( id, name, surname, date_of_birth)
  • 雇员( id, hire_date)

我需要将hire_date桌面employee设置为date_of_birth+ 10 年。

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, hire_date,salary,bonus)

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 的其余部分被视为单独的

您需要包含 aSELECT才能实际检索数据

当你把那批东西整理好后,你会更接近:-)

(我选择不只是给出sql)

于 2012-12-08T10:52:12.443 回答