Доброго. Я не буду давать вам готовый результат, а дам пищу к размышлению и один пример. Никакой Distinct не нужен, использовать его приходится в редких случаях. В остальном он говорит о том, что либо база спроектирована неверно, либо неверно написан запрос.
select * from tbl_user where id_user in (select id_user from tbl_user_tag);
Одна строка - и вот вам все пользователи, у которых есть хотя бы один признак.
Не менее просто делается выборка всех пользователей, у которых есть все признаки, но это для самостоятельного размышления. :) Удачи.