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