Ссылка на текущую строку в инструкции 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
на ваш подзапрос