这可能非常简单,但是由于我是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
谁能给我一些见解,是否行得通?我已经备份了数据库,所以希望如果我破坏了某些东西可以恢复它。
谢谢 罗布
答案 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