ОШИБКА 1241 (21000): Операнд должен содержать 1 столбец при выполнении запроса

Вопрос: INSERT INTO People(Track_id_Reference) SELECT track_id FROM Tracks WHERE track_title IN (SELECT tracktitle FROM top100 WHERE artist IN (SELECT p.People_name, t.artist FROM People AS p RIGHT JOIN top100 AS t ON p.People_name=t.artist UNION DISTINCT SELECT p.People_name, t.artist FROM People AS p LEFT JOIN top100 AS t ON p.People_name=t.artist)); Ошибка, которую я получаю, ERROR 1241 (21000):

Вопрос: INSERT INTO People(Track_id_Reference) SELECT track_id FROM Tracks WHERE track_title IN (SELECT tracktitle FROM top100 WHERE artist IN (SELECT p.People_name, t.artist FROM People AS p RIGHT JOIN top100 AS t ON p.People_name=t.artist UNION DISTINCT SELECT p.People_name, t.artist FROM People AS p LEFT JOIN top100 AS t ON p.People_name=t.artist));

Ошибка, которую я получаю,

ERROR 1241 (21000): Operand should contain 1 column(s)

подзапрос, объединения которого возвращают 2 столбца. Как я могу это исправить?

Лучший ответ:

вам не хватает FROM предложение

SELECT track_id FROM tableName WHERE track_title

поэтому полный запрос будет

INSERT INTO People (Track_id_Reference) SELECT track_id FROM — <<== add tableName here WHERE track_title = ( SELECT tracktitle FROM top100 WHERE artist = ( SELECT p.People_name, t.artist FROM People AS p RIGHT JOIN top100 AS t ON p.People_name = t.artist UNION DISTINCT SELECT p.People_name, t.artist FROM People AS p LEFT JOIN top100 AS t ON p.People_name = t.artist ) );

еще одна проблема, которая возникнет в ближайшее время, – это использование знака = в результате подзапроса, гораздо безопаснее использовать IN, чем =, потому что он будет генерировать исключение, если, например, в подзапросе будет возвращено более одного значения. Пример,

INSERT INTO People (Track_id_Reference) SELECT track_id FROM — <<== add tableName here WHERE track_title IN ( SELECT tracktitle FROM top100 ………….

Оцените статью
Добавить комментарий