Ссылка на текущую строку в инструкции INSERT INTO MySQL

Я пытаюсь выполнить оператор 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 с известным идентификатором, запрос работает как ожидалось.

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам