2011-08-25 97 views
4

我有一个简单的虚拟SQL与我的假人头部:(1242 - 子查询返回多个1行的MySQL

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 wi th contactgroups.id

+0

如果必须返回标量值。从来没有测试过,但尝试用group_concat替换contactgroups.grname(contactgroups.grname) –

+0

@nick您应该将其作为回答 –

+0

@Adrian。做到了。希望它有效。我会尽快尝试。 ;) –

回答

1

if必须返回一个标量值。 从来没有测试,但尝试替代contactgroups.grnamegroup_concat(contactgroups.grname)

+0

感谢您的评论,它不会给出错误消息了!这是好的,但仍然没有运气与组名::( –

+0

抱歉没有工作。 –

-1

嵌套查询

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

似乎返回超过1行,你可以使用LIMIT来限制这一点。或者,如果没有预期,请检查您的数据。

+0

-1 MySQL不支持子查询中的LIMIT –

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) 

另外,我有一个偷偷摸摸的疑虑,你的联系人组表中有一个或多个你的groupmembers表条目的多个条目。你可能也想确认一下。