0

我需要知道特定地图上生物的所有唯一 ID 并进行此查询。

select DISTINCT id a from creature
    where id in( select entry from creature_template where map=209);

它工作正常。

现在我想在其他表中插入新行,其中第一列将是与第一个查询不同的数字,其他列是常量。

insert into creature_loot_template (entry,ChanceOrQuestChance,groupid,mincountOrRef)
select entry,'0.1','1','-11111' from creature_template
where entry=(select DISTINCT id a from creature where id in( select entry from creature_template where map=209)); 

结果 - 子查询返回超过 1 行。我需要在那里使用某种加入或联合吗?

4

2 回答 2

1

要解决这个问题,您必须输入 IN 而不是 =

INSERT INTO creature_loot_template(entry, 
                                   ChanceOrQuestChance, 
                                   groupid,
                                   mincountOrRef)
SELECT entry, '0.1', '1', '-11111'
FROM creature_template
WHERE entry IN (
    SELECT DISTINCT id a
    FROM creature
    WHERE id IN (
        SELECT entry
        FROM creature_template
        WHERE map = 209
        )
    );

=期望一对一的比较,IN是一对多的比较。


进一步阅读您的查询,因为您为除条目之外的每一列插入相同的值,我认为您可以通过以下方式更轻松地完成您想要的操作:

INSERT INTO creature_loot_template(entry, 
                                   ChanceOrQuestChance, 
                                   groupid,
                                   mincountOrRef)
SELECT DISTINCT entry,
  '0.1',
  '1',
  '-11111'
FROM creature_template ct
INNER JOIN creature c ON ct.entry = c.id
WHERE ct.map = 209;
于 2013-10-24T20:40:35.267 回答
0

我认为您的第一个查询返回不止一行?

在这种情况下,您需要使用IN而不是=附加它作为您的INSERT.

INSERT INTO creature_loot_template
  (entry,ChanceOrQuestChance,groupid,mincountOrRef)
  (
  SELECT
    entry,'0.1','1','-11111'
  FROM
    creature_template
  WHERE
    entry IN         -- Use IN rather than = here. --
    (
      SELECT DISTINCT id a
      FROM creature
      WHERE id IN
      (
        SELECT entry
        FROM creature_template
        WHERE map=209
      )
    )
  )
;
于 2013-10-24T20:42:57.117 回答