my %ids; # ... $sth->bind_columns( undef, \$orig_service_id, \$orig_stop, $depart_orig); while ($sth->fetch()) { push @{$ids{$orig_service_id}}, { stop => $orig_stop, depart => $depart_orig, # ... }; } # ... $sth->bind_columns( undef, \$dest_service_id, \$dest_stop, $depart_dest); while ($sth->fetch()) { if (exists $ids{$dest_service_id}) { print "ID $dest_service_id:\n"; my $i = 0; # counter (only needed for demo purposes) for my $orig ( @{$ids{$dest_service_id}} ) { # $orig is a hashref to origin data printf "matching origin row #%d:\n", ++$i; printf " orig_stop = %s\n", $orig->{stop}; printf " depart_orig = %s\n", $orig->{depart}; # ... } } }