如何正确编写此SQL语句?
如标题中所述:如何正确编写此SQL语句如何正确编写此SQL语句?,sql,join,informix,Sql,Join,Informix,如标题中所述:如何正确编写此SQL语句 select sl.switch_ip, sl.switch_name, count(m.switch_ip) as macentries, (select arpentries from (select sl1.switch_ip, sl1.switch_name, count(ar.switch_ip) as arpentries from my_switchlist sl1
select
sl.switch_ip,
sl.switch_name,
count(m.switch_ip) as macentries,
(select arpentries from (select sl1.switch_ip, sl1.switch_name, count(ar.switch_ip) as arpentries
from my_switchlist sl1
left Join my_arptable ar on ar.switch_ip = sl1.switch_ip
group by sl1.switch_ip,sl1.switch_name
order by sl1.switch_ip))
from my_switchlist sl
left Join my_mactable m on m.switch_ip = sl.switch_ip
group by sl.switch_ip,sl.switch_name
order by sl.switch_ip
如果单独执行select和sub select,则可以正常工作。
但当我把它们放在一起时,我得到了以下错误:
Error: A subquery has returned not exactly one row.
SQLState: 21000
ErrorCode: -284
Position: 470
在您的my_switchlist、my_arptable join中,可能有多个sl1.switch_ip、sl1.switch_名称组
select arpentries from (select sl1.switch_ip, sl1.switch_name, count(ar.switch_ip) as arpentries
from my_switchlist sl1
left Join my_arptable ar on ar.switch_ip = sl1.switch_ip
group by sl1.switch_ip,sl1.switch_name
order by sl1.switch_ip)
上述查询不应返回多个结果,以便在外部查询中使用其结果。因此,可能存在多个sl1.switch\u ip、sl1.switch\u name组。看起来您需要两个“计数”聚合,这应该可以通过以下方式实现:
select
macquery.switch_ip,
macquery.switch_name,
macquery.macentries,
arpquery.arpentries
from
(
select
sl.switch_ip as switch_ip,
sl.switch_name as switch_name,
count(m.switch_ip) as macentries
from my_switchlist sl
left outer join my_mactable m
on m.switch_ip = sl.switch_ip
group by
sl.switch_ip,
sl.switch_name
) macquery
join
(
select
sl1.switch_ip as switch_ip,
sl1.switch_name as switch_name,
count(ar.switch_ip) as arpentries
from my_switchlist sl1
left outer join my_arptable ar
on ar.switch_ip = sl1.switch_ip
group by
sl1.switch_ip,
sl1.switch_name
) arpquery
on (macquery.switch_ip = arpquery.switch_ip
and macquery.switch_name = arpquery.switch_name)
很简单,您的子选择返回多行,并且由于您尝试将它们合并到一个select语句中,因此假设子查询只返回一行。尝试将两个select语句连接在一起。如何可以有多个列?正如我所说:如果单独运行,查询运行良好-返回一列如果内部查询返回多个结果,则不能在聚合查询中使用其结果。我明白了。哦,我明白了。我并没有实际测试这个,所以可能有一些东西潜入-语法错误到底是什么?连接如何通过列switch\u ip、switch\u name工作,还是在行号上工作?错误:发生了语法错误。SQLState:42000错误代码:-201位置:681因此,这里的原则是每个子查询返回一个表,该表有3列:第一列为“switch\u ip”、“switch\u name”和“count”“macentries”,第二列为“arpcentries”。最外层的查询和联接只是利用此功能将“switch\u ip”和“switch\u name”的“键”上的两个“表”联接在一起