使用其他表更新表

时间:2018-07-23 10:11:07

标签: sql sql-server-2014

这可能非常简单,但是由于我是SQL noobie,所以我不想弄错这个意思并破坏我们的数据库。

我正在根据另一个表中的内容来更新表。在一个表中,我们列出了用户列表,他们所使用的表单以及他们的导师。在前端更新表格时,它不会将教师更改为与该表格相关的老师。例如,我们已经将表格更改为新表格,下面的导师现在应该分别阅读Tom,Dick和Harry:

Table 1

   user   |   form   |   tutor
---------------------------------
    a     |  10Tom   |   Bill
    b     |  11Dick  |   Paul
    c     |  9Harry  |   Dave

我们还有另一个表格,将各个表格链接到正确的导师:

Table 2

   form    |   tutor
-----------------------
   10Tom   |   Tom
   11Dick  |   Dick
   9Harry  |   Harry

我认为代码应该看起来像这样,但是我不知道JOIN在这种情况下是否可以工作:

UPDATE Table1
LEFT OUTER JOIN Table2
ON Table1.Form = Table2.Form
SET Table1.Tutor = Table2.Tutor
WHERE Table1.Form = Table2.Form 

谁能给我一些见解,是否行得通?我已经备份了数据库,所以希望如果我破坏了某些东西可以恢复它。

谢谢 罗布

4 个答案:

答案 0 :(得分:2)

这应该有效。我假设需求需要左外部联接。

UPDATE Table1
SET Table1.Tutor = Table2.Tutor
from Table2
where Table1.Form = Table2.Form;

答案 1 :(得分:2)

在MySQL中,您可以将其表示为:

UPDATE Table1 t1 JOIN
       Table2 t2
       ON t1.Form = t2.Form
    SET t1.Tutor = t2.Tutor;

在SQL Server或Postgres中,您可以执行以下操作:

UPDATE Table1 t1 JOIN
    SET t1.Tutor = t2.Tutor
    FROM Table2 t2
    WHERE t1.Form = t2.Form;

在任何数据库中,您都应该能够做到:

UPDATE Table1 JOIN
    SET Tutor = (SELECT t2.Tutor
                 FROM Table2 t2
                 WHERE table1.Form = t2.Form
                )
    WHERE EXISTS (SELECT 1
                  FROM Table2 t2
                  WHERE table1.Form = t2.Form
                );

答案 2 :(得分:1)

您没有指定正在使用的后端,但是语法看起来不正确。而是这样做:

UPDATE Table1
SET Table1.Tutor = Table2.Tutor
from table2
WHERE Table1.Form = Table2.Form;

答案 3 :(得分:1)

Update Table1 
SET tutor = t2.tutor
From Table1 t1
JOIN Table2 t2 
on t1.form = t2.form