我的虚拟头部有一个简单的虚拟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
答案 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
来限制此行。或者,如果不是这样,请检查您的数据。