使用不同的 table 更新 table

Updating a table using a different table

这可能非常简单,但由于我是一个 SQL 新手,我不想弄错并破坏我们的数据库。

我正在考虑根据另一个 table 中的内容更新 table。在一个 table 中,我们有一个用户列表,他们所在的表格和他们的导师。当在前端更新表单时,它不会将导师更改为与该表单相关的导师。例如,我们将表格更改为新表格,下面的导师现在应该分别读汤姆、迪克和哈利:

Table 1

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

我们还有另一个 table 将相应的表格链接到正确的导师:

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 

谁能告诉我这是否可行?我已经备份了数据库,所以希望如果我确实破坏了某些东西,我可以恢复它。

谢谢 罗布

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

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

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

UPDATE Table1
SET Table1.Tutor = Table2.Tutor
from table2
WHERE Table1.Form = Table2.Form;
Update Table1 
SET tutor = t2.tutor
From Table1 t1
JOIN Table2 t2 
on t1.form = t2.form

在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
                );