Я пишу вложенный запрос MySQL, в котором подзапрос возвращает более одной строки и, следовательно, запрос не может быть выполнен.Выполнение вложенных запросов MySQL
Может ли кто-нибудь предложить мне решение этой проблемы?
Заранее спасибо.
Я пишу вложенный запрос MySQL, в котором подзапрос возвращает более одной строки и, следовательно, запрос не может быть выполнен.Выполнение вложенных запросов MySQL
Может ли кто-нибудь предложить мне решение этой проблемы?
Заранее спасибо.
ошибка о подзапрос, возвращающий более одного значения, говорит мне, что вы пытаетесь прямого сравнения значений, например:
WHERE col = (SELECT col2 FROM TABLE_2)
Решение зависит от данных, поступающих из подзапроса - сделать вас хотите, чтобы запрос использовал все возвращаемые значения? Если да, то изменить знак равенства для IN:
WHERE col IN (SELECT col2 FROM TABLE_2)
В противном случае, вам нужно исправить подзапрос так это только когда-либо возвращает одно значение. Функции агрегации MAX или MIN являются возможными - они вернут самое высокое или самое низкое значение. Это может быть просто вопрос соотнесения подзапрос:
FROM TABLE_1 t1
WHERE t1.col = (SELECT MAX(t2.col2)
FROM TABLE_2 t2
WHERE t2.fk_col = t1.id) -- correlated example
Как Tabhaza указывает, подзапрос вообще не возвращает более одного столбца (хотя некоторые базы данных поддерживают согласование кортежа), в этом случае вам нужно определить производную таблицу/встроенное представление и присоединиться к ней.
бы хорошо, чтобы получить более подробную информацию по этому вопросу вы имеющие ...
Попробуйте подключиться к производной таблице, а не выполнять подзапрос; это позволит вам вернуть несколько полей:
SELECT a.Field1, a.Field2, b.Field3, b.Field4
FROM table1 a INNER JOIN
(SELECT c.Field3, c.Field4, c.Key FROM table2 as c) as b ON a.Key = b.Key
WHERE ...
Используйте пункт LIMIT на вложенный запрос, так что всегда возвращает максимум 1 ряд
Это уклоняется от проблемы - если подзапрос должен возвращать значение 1, но возвращает много, суб-запрос написан неправильно. Предложение LIMIT исправляет симптом, но не причину. –
ну, так как ни один код не был отправлен, ответ верен, откуда мы знаем, что он не просто ищет последнюю/самую большую/любую строку в подзапросе, а первая возвращаемая строка всегда правильная? – SpliFF
Вы можете добавить LIMIT 1
к подзапроса поэтому верхний запрос учитывает только первый результат. Вы также можете отсортировать результаты из подзапроса перед выполнением LIMIT, чтобы вернуть результат с наивысшим/самым низким значением X. Но убедитесь, что это на самом деле то, что вы хотите, поскольку многозарядный подзапрос часто является симптомом базового проблема.
Это уклоняется от проблемы - если подзапрос должен возвращать значение 1, но возвращает много, суб-запрос написан неправильно. Предложение LIMIT исправляет симптом, но не причину. –
то что делать @jonathan Leffler sir, пожалуйста, предложите свое решение –
@Ankur: покажите нам больше информации - SQL, который не работает, и достаточно схемы (схемы) таблицы, в которой люди имеют что-то продолжать. Смутный вопрос может только получить смутные ответы - к сожалению. –
это звучит как логическая проблема, а не проблема синтаксиса.
Почему подзапрос возвращает более одной строки?
Почему у вас это есть в месте, где требуется только одна строка?
Вам необходимо перестроить что-то, чтобы соответствовать этим двум вещам. без каких-либо указаний на вашу систему, ваш запрос или ваше намерение, очень сложно помочь дальше.
+1 - Пятно на ... –
Если база данных говорят, что вы возвращаете больше, чем одна строки, вы должны слушать, что он говорит, и изменить свой запрос так что он возвращает только одну строку.
Это проблема в вашей логике.
Измените запрос так, чтобы он возвращал только одну строку.
Подумайте, почему запрос возвращает более одной строки и определяет, как получить запрос, чтобы вернуть только одну строку из этого результата.
указать образец кода? –
Проблема в строке 4. Просто измените это, и он будет работать. –