MySQL SQL错误超过1表选择

时间:2014-05-01 12:41:10

标签: mysql

我正在尝试编写一个检查多个表的sql,这就是我得到的:

UPDATE item_template SET BuyPrice = 0, SellPrice = 1 WHERE entry IN (SELECT item FROM npc_vendor WHERE entry IN (SELECT entry FROM creature WHERE area = 3998)));

现在我的错误是:

  

[Err] 1064 - 您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以获得正确的语法   使用附近''在第1行

可能导致什么原因?

6 个答案:

答案 0 :(得分:1)

您有两个开放(和三个关闭)

此外,您应该尝试使用JOIN而不是嵌套子查询来重写此内容。

答案 1 :(得分:1)

应该是

UPDATE item_template SET BuyPrice = 0, SellPrice = 1 WHERE entry IN (SELECT item FROM npc_vendor WHERE entry IN (SELECT entry FROM creature WHERE area = 3998));

答案 2 :(得分:1)

我认为你有太多关闭的问题。

答案 3 :(得分:1)

UPDATE item_template SET BuyPrice = 0, SellPrice = 1 WHERE entry IN (SELECT item FROM npc_vendor WHERE entry IN (SELECT entry FROM creature WHERE area = 3998));

这是正确的。你已经添加了额外的')'

答案 4 :(得分:1)

你有一个额外的关闭paranthese

    UPDATE item_template
SET BuyPrice = 0,
    SellPrice = 1
WHERE entry IN
    (SELECT item
     FROM npc_vendor
     WHERE entry IN
         (SELECT entry
          FROM creature
          WHERE area = 3998));
                         ^^^^^^^ Remove one ) here

答案 5 :(得分:1)

正如Dave Mroz所说,如果你将multi-table update syntaxJOIN一起使用,这个查询会更有效率,如下所示:

UPDATE item_template 
  inner join npc_vendor on npc_vendor.item = item_template.entry
  inner join creature on creature.entry = npc_vendor.entry
SET item_template.BuyPrice = 0, item_template.SellPrice = 1 
where creature.area = 3998;