1

タイトルに書かれているように:この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 
        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

選択と副選択は、別々に実行された場合は正常に機能します。しかし、それらを組み合わせるとすぐに、次のエラーが発生します。

Error: A subquery has returned not exactly one row.
SQLState: 21000
ErrorCode: -284
Position: 470
4

2 に答える 2

0

おそらく、「my_switchlist、my_arptable」結合に複数の「sl1.switch_ip、sl1.switch_name」グループがあります。

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_ip、sl1.switch_name」グループがあります。

于 2012-12-04T12:53:45.760 に答える
0

両方の「カウント」集計が必要なようです。これは、次のような方法で可能になるはずです。

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)
于 2012-12-04T12:59:48.277 に答える