SELECT * FROM article, articlelinks, articlelinks articlelinks_2, articlelinks articlelinks_3 ... WHERE article.id = articlelinks.article AND articlelinks.id = $with[0] AND article.id = articlelinks_1.article AND articlelinks_1.id = $with[1] AND ... #### my %params; $params{'articlelinks.id'} = $with[0]; for my $i ( 2 .. (scalar @with) - 1 ){ $params{"articlelinks_$i.id"} = $with[$i - 1]; } my @articles = $schema->resultset('articles')->search( \%params, { join => [ 'articlelinks' x scalar( @with ) ] } );