Sql 使用其他表更新表

Sql 使用其他表更新表,sql,sql-server-2014,Sql,Sql Server 2014,这可能非常简单,但由于我是一个SQL noobie,我不想弄错,破坏我们的数据库 我正在考虑根据另一个表中的内容更新一个表。在一个表中,我们有一个用户列表,他们所在的表单和他们的导师。当表单在前端更新时,它不会将导师更改为与该表单相关的导师。例如,我们已将表格更改为新的表格,下面的导师应分别为Tom、Dick和Harry: Table 1 user | form | tutor --------------------------------- a |

这可能非常简单,但由于我是一个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 
有人能告诉我这是否有效吗?我已经备份了数据库,所以希望如果我真的破坏了某些东西,我可以恢复它

谢谢
Rob

这应该行得通。我假设这个需求需要一个左外连接

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

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

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


您的意思是“…从表1中离开外部连接表2…”?您是否意识到执行此操作有危险?当没有匹配项时,它会将导师设置为空。@CetinBasoz。糟糕的是,我复制了他的样本并对其进行了更改,忘记重写最后一部分。谢谢你指出。你的意思是“…从表1左外连接到表2上…”?你知道这执行起来很危险吗?当没有匹配项时,它会将导师设置为空。@CetinBasoz。糟糕的是,我复制了他的样本并对其进行了更改,忘记重写最后一部分。谢谢你指出它。dbms的名称是SQL Server2014@CetinBasoz . . . 没有
左连接
WHERE
子句将其转换为
内部连接
@GordonLinoff,这正是我的意思。你已经迟到了。其中一个答案,保留左连接,并删除WHERE。这就是我发表评论的原因。@GordonLinoff OK已删除。请使用dbms名称。BMS是SQL Server2014@CetinBasoz . . . 没有
左连接
WHERE
子句将其转换为
内部连接
@GordonLinoff,这正是我的意思。你已经迟到了。其中一个答案,保留左连接,并删除WHERE。这就是我发表评论的原因。@GordonLinoff OK被删除。你需要加入them@Thomas,由于where子句,这里的内部连接是隐式的:)Zaynal是对的,你需要一些教程。@托马斯是向下投票的大师感谢他向下投票这将帮助他成为一个好的人:你需要加入them@Thomas,由于where子句,这里的内部连接是隐式的:)Zaynal是对的,你需要一些教程。@Thomas是否决票的大师感谢他否决票这将帮助他成为优秀的人:D