我有一个简单的虚拟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中选择,它应该与带有contactgroups.id的groupmembers.group_id相匹配
发布于 2011-08-26 05:33:11
if必须返回标量值。我从未测试过它,但尝试用group_concat(contactgroups.grname)替代contactgroups.grname
发布于 2011-08-26 06:23:25
我不确定为什么要在子查询中包含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表条目。你可能也想确认这一点。
发布于 2011-08-26 05:33:21
嵌套的select
(select contactgroups.grname on contactgroups.id=groupmembers.id)似乎返回超过1行,您可以使用LIMIT来限制它。或者,如果这不是预期的,请检查您的数据。
https://stackoverflow.com/questions/7197355
复制相似问题