1242 - 子查询返回多行MySQL

时间:2011-08-25 21:21:54

标签: mysql sql

我的虚拟头部有一个简单的虚拟sql :(

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中选择它应该与groupmembers.group_id匹配contactgroups.id

3 个答案:

答案 0 :(得分:1)

if必须返回标量值。 从未对其进行过测试,但尝试将contactgroups.grname替换为group_concat(contactgroups.grname)

答案 1 :(得分:0)

不确定为什么要在子查询中包含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)

此外,我怀疑您的contactgroups表有一个或多个groupmembers表条目的多个条目。您可能也想确认一下。

答案 2 :(得分:-1)

嵌套选择

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

似乎返回超过1行,您可以使用LIMIT来限制此行。或者,如果不是这样,请检查您的数据。