1242-子查询返回多行MySQL

1242-子查询返回多行MySQL,mysql,sql,Mysql,Sql,我有一个简单的虚拟sql和我的虚拟头:( 这应该只列出组名,但我看不出我又做错了什么:(需要帮助吗 另一种尝试: SELECT contactgroups.grname FROM contactgroups, groupmembers WHERE contactgroups.id = groupmembers.id works well返回2个组名。这就是错误消息的原因。但是如果我从groupmembers中选择,它应该与groupmembers.group\u id和contactgroup

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

这应该只列出组名,但我看不出我又做错了什么:(需要帮助吗

另一种尝试:

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

works well返回2个组名。这就是错误消息的原因。但是如果我从groupmembers中选择,它应该与groupmembers.group\u id和contactgroups.id匹配。id

如果
必须返回标量值。 从未测试过它,但尝试用
group\u concat(contactgroups.grname)替换
contactgroups.grname
嵌套的选择

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

似乎返回了多行,您可以使用
LIMIT
对此进行限制。或者,如果不是预期的,请检查您的数据。

不确定为什么要将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表条目。您可能也要确认这一点。

if必须返回标量值。从未测试过它,但尝试用group_concat(contactgroups.grname)替换contactgroups.grname@尼克,你应该把它作为一个answer@Adrian.成功了。希望能成功。我会尽快尝试的任务是从另一个表中返回一个组名,如果likntype=group。@JohnFx。谢谢我需要关心格式更多您是对的谢谢评论,它不再给出错误消息!这很好,但组名仍然不走运:(
SELECT IF(`linktype`="group", contactgroups.grname,2) 
FROM groupmembers
LEFT JOIN contactgroups ON (contactgroups.id = groupmembers.id)