Ссылка на текущую строку в инструкции INSERT INTO MySQL - PullRequest
0 голосов
/ 10 июня 2011

Я пытаюсь выполнить оператор INSERT INTO, как показано ниже:

insert into table1 (id, data1, data2) select c.id, c.data1, (select a.id 
from table3 a, table2 b where b.id=c.id and a.data3=b.data3) from table2 c;

По сути, здесь происходит то, что я переносю некоторые данные из одной таблицы в другую.Однако в новой таблице я хочу получить идентификатор строки из третьей таблицы, а не строку, которая была сохранена в исходной таблице.

Мне кажется, что мой запрос близок, однако когда я его запускаю, mysqlвыдача ошибки:

ERROR 1242 (21000): Subquery returns more than 1 row

Я думаю, что проблема в b.id=c.id, но я не понимаю, почему c.id не будет определенным значением.Если я заменим c.id на известный идентификатор, запрос будет функционировать, как и ожидалось.

В более общем смысле мне нужно иметь доступ к «текущей строке», из которой я нахожусь, из результатов моего оператора selectи использовать его идентификатор в этом внутреннем операторе выбора.

Как сделать так, чтобы мой внутренний оператор выбора ссылался только на одну строку?

Это MySql 5.0.77, работающий в CentOS.

1 Ответ

1 голос
/ 10 июня 2011

Мы не можем сказать вам, почему ваш подзапрос возвращает более одной строки, не видя больше ваших таблиц / данных.Проведите некоторое расследование и выясните, какие записи дублированы, и вы сможете решить вашу проблему.

Если вас не интересуют дубликаты, и вы просто хотите, чтобы запрос работал, используйте LIMIT 0,1 дляВаш подзапрос

...