我有2个表:quest_mail_loot_template(Table1)和quest_template(Table2)。 它们都有“Entry”列,这是它们的主要ID密钥。他们不相互依赖。
Table2的列RewMailTemplateId可以为null,但我只需要RewMailTemplateId<>0
。
我需要查找两个表中的条目相同的行,并且当它发生时,更改表1中的每个条目,从表2中的列RewMailTemplateId更改数字。
我试过用这个:
update quest_mail_loot_template Table1 set entry=(
select RewMailTemplateId
from quest_template where RewMailTemplateId<>0)
where (
select Table2.RewMailTemplateId
from quest_template TBL2
where TBL2.entry = TBL1.entry
);
似乎sql正在尝试用所有找到的数字更新1个字段,但是我需要为他自己的RewMailTemplateId更新每个条目,这些条目是不同的数字。
运营商至少应该使用哪些建议?
答案 0 :(得分:0)
您的子查询正在选择所有非零模板,而不仅仅是与quest_mail_loot_template条目关联的模板。你需要两次合格。没有你的所有列名,但有类似的东西。
(
select RewMailTemplateId
from quest_template
where RewMailTemplateId<>0
And quest_template.??? = Table1.???
)
答案 1 :(得分:0)
UPDATE table1 a
JOIN table2 b
ON a.entry = b.entry
AND b.RewMailTemplateId<>0 AND b.RewMailTemplateId!=a.entry
SET a.entry = b.RewMailTemplateId
或者
UPDATE table1 a
JOIN table2 b
ON a.entry = b.entry
SET a.entry = b.RewMailTemplateId WHERE b.RewMailTemplateId<>0 AND b.RewMailTemplateId!=a.entry