SELECT i.item_id FROM items AS i LEFT JOIN mapping AS m ON (m.item_id = i.item_id) GROUP BY i.item_id HAVING EVERY(m.container_id != 1) OR EVERY(m.container_id != 1) IS NULL #### my $rs = $schema->resultset('items'); my $items = $rs->search(undef, { join => 'mapping', group_by => [ map { "me.$_" } $rs->result_source->columns ], having => "EVERY(m.container_id != 1) OR EVERY(m.container_id != 1) IS NULL", });