You will need more than one query because before querying posts you have to know what posts to exclude.
I personally don’t see anything bad in ‘cutoff’. This code should work properly:
Update: It breaks pagination (see comments).
<?php
$category_to_filter = 11;
while ( have_posts() ) : the_post();
$categories = get_the_category();
if( in_array($category_to_filter, $categories) && count($categories) > 1 ) {
the_title();
the_content();
}
endwhile;
Update: Following code will not break pagination:
<?php
$category_to_filter = 11;
$posts_in = array();
while ( have_posts() ) : the_post();
$categories = get_the_category();
if( in_array($category_to_filter, $categories) && count($categories) > 1 ) {
$posts_in[] = $post->ID;
}
endwhile;
$my_query = new WP_Query( array(
'post_type' => 'post',
'post_status' => 'publish',
'post__in' => $posts_in
)
);
while ( $my_query->have_posts() ) : $my_query->the_post();
// your template stuff here
endwhile;
wp_reset_query();