use DBI; use HTML::Template; my $dbh = DBI->connent( qw(dbi:mysql:ndb user pass), {RaiseError => 1}, ); my $sites = $dbh->selectall_arrayref(' select distinct site_name as name from sites order by site_name ',{Slice=>{}}); for my $site (@$sites) { $site->{routers} = $dbh->selectall_arrayref(' select distinct router as name from sites where site_name = ? ',{Slice => 1}, $site->{name}); #i removed the router = ? part from here #how do you expect to query a single router if there are multiples? $site->{interfaces} = $dbh->selectall_arrayref(' select interface as name from sites where site_name = ? ',{Slice => 1}, $site->{name}); } my $tmpl = HTML::Template->new(filehandle => \*DATA); $tmpl->param(sites => $sites); print $tmpl->output; __DATA__ Name: Routers: Interfaces: