创建新行,而来自1列的数据取自其他表

时间:2013-10-24 19:54:21

标签: mysql insert

我需要知道特定地图上所有生物的唯一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行。我需要在那里使用某种联合或联合吗?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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
      )
    )
  )
;