1242 - Подзапрос возвращает более 1 строки MySQL - PullRequest
4 голосов
/ 26 августа 2011

У меня есть простой дурачок sql с моей дурацкой головой: (* ​​1001 *

select if(`linktype`="group", (select contactgroups.grname 
                               from contactgroups, groupmembers 
                                   on contactgroups.id=groupmembers.id),2) 
from groupmembers

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

Еще одна попытка:

SELECT contactgroups.grname
FROM contactgroups, groupmembers
WHERE contactgroups.id = groupmembers.id

работает хорошо, возвращает 2 имени группы. Так вот почему сообщение об ошибке. Но если я выбираю членов группы, он должен совпадать с groupmembers.group_id с contactgroups.id

Ответы [ 3 ]

1 голос
/ 26 августа 2011

if должен возвращать скалярное значение. Никогда не проверял, но попробуйте заменить contactgroups.grname на group_concat(contactgroups.grname)

0 голосов
/ 26 августа 2011

Не уверен, почему вы включаете таблицу groupMembers в подзапрос, но как насчет этой альтернативы:

SELECT IF(`linktype`="group", (SELECT contactgroups.grname 
                               FROM contactgroups 
                               WHERE contactgroups.id=groupmembers.id),2) 
FROM groupmembers

или, что еще лучше, избавьтесь от подзапроса, так как он не нужен

SELECT IF(`linktype`="group", contactgroups.grname,2) 
FROM groupmembers
LEFT JOIN contactgroups ON (contactgroups.id = groupmembers.id)

Кроме того, у меня есть скрытое подозрение, что в вашей таблице групп контактов есть несколько записей для одной или нескольких записей в таблице членов вашей группы. Возможно, вы тоже захотите это подтвердить.

0 голосов
/ 26 августа 2011

Вложенный выбор

(select contactgroups.grname on contactgroups.id=groupmembers.id)

, кажется, возвращает более 1 строки. Вы можете использовать LIMIT, чтобы ограничить это.Или, если это не ожидается, проверьте свои данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...