首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >1242 -子查询返回超过1行的MySQL

1242 -子查询返回超过1行的MySQL
EN

Stack Overflow用户
提问于 2011-08-26 05:21:54
回答 3查看 908关注 0票数 4

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

代码语言:javascript
复制
select if(`linktype`="group", (select contactgroups.grname 
                               from contactgroups, groupmembers 
                                   on contactgroups.id=groupmembers.id),2) 
from groupmembers

这应该只列出组的名称,但我看不到我做错了什么:(有什么帮助吗?

再试一次:

代码语言:javascript
复制
SELECT contactgroups.grname
FROM contactgroups, groupmembers
WHERE contactgroups.id = groupmembers.id

运行良好,返回2个组名称。这就是为什么会出现错误消息。但是如果我从groupmembers中选择,它应该与带有contactgroups.id的groupmembers.group_id相匹配

EN

回答 3

Stack Overflow用户

发布于 2011-08-26 05:33:11

if必须返回标量值。我从未测试过它,但尝试用group_concat(contactgroups.grname)替代contactgroups.grname

票数 1
EN

Stack Overflow用户

发布于 2011-08-26 06:23:25

我不确定为什么要在子查询中包含groupMembers表,但是这个替代方案如何:

代码语言:javascript
复制
SELECT IF(`linktype`="group", (SELECT contactgroups.grname 
                               FROM contactgroups 
                               WHERE contactgroups.id=groupmembers.id),2) 
FROM groupmembers

或者更好的是,完全去除子查询,因为它不是必需的

代码语言:javascript
复制
SELECT IF(`linktype`="group", contactgroups.grname,2) 
FROM groupmembers
LEFT JOIN contactgroups ON (contactgroups.id = groupmembers.id)

此外,我还怀疑您的contactgroups表中有多个条目对应于一个或多个groupmembers表条目。你可能也想确认这一点。

票数 0
EN

Stack Overflow用户

发布于 2011-08-26 05:33:21

嵌套的select

代码语言:javascript
复制
(select contactgroups.grname on contactgroups.id=groupmembers.id)

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7197355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档