Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL comparando e excluindo resultados corretamente


Agora acho que entendi.

Se os usuários tiverem apenas uma resposta para cada pergunta, isso deve funcionar:
select ua.quid,
       GROUP_CONCAT(IF(uid=1,answer,'') SEPARATOR '') as a1,
       GROUP_CONCAT(IF(uid=20008,answer,'') SEPARATOR '') as a2
from user_answers ua
where importance <> 1 and uid in (1, 20008)
group by ua.quid
having sum(uid = 1) > 0 and
       sum(uid = 20008) > 0 and
       max(case when uid = 1 then answer end) <> max(case when uid = 20008 then answer end);

EDITAR:

É claro que os usuários podem tem várias respostas. Isso está me empurrando para uma join abordagem em vez de uma abordagem apenas agregada. Infelizmente, essa abordagem precisa de uma full outer join , que o MySQL não suporta. Então, vamos tentar agregar por resposta, primeiro. Você tem apenas dois usuários, então vamos dinamizar os valores:
select ua.quid,
       GROUP_CONCAT(IF(user1 > 0, answer, '') SEPARATOR '') as a1,
       GROUP_CONCAT(IF(user20008 > 0, answer, '') SEPARATOR '') as a2
from (select ua.quid, ua.answer,
             max(case when ua.uid = 1 then 1 else 0 end) as user1,
             max(case when ua.uid = 20008 then 1 else 0 end) as user20008
      from user_answers ua
      where importance <> 1 and ua.uid in (1, 20008)
      group by ua.quid, ua.answer
     ) t
where t.user1 = 0 or t.user20008 = 0
group by ua.quid;