尝试使用其他表中的数字更新列(子查询返回多于1行)

时间:2013-10-14 16:21:01

标签: mysql

我有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更新每个条目,这些条目是不同的数字。

运营商至少应该使用哪些建议?

2 个答案:

答案 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