sql >> Database teknologi >  >> RDS >> Mysql

MySQL sammenligner og ekskluderer resultater korrekt

Nu tror jeg, jeg forstår det.

Hvis brugerne kun har ét svar til hvert spørgsmål, så burde dette virke:

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);

EDIT:

Selvfølgelig kan brugere har flere svar. Dette skubber mig mod et join tilgang frem for en samlet tilgang. Desværre kræver en sådan tilgang en full outer join , som MySQL ikke understøtter. Så lad os prøve at samle efter svar først. Du har kun to brugere, så vi pivoterer værdierne:

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;



  1. Oracle-databaseafhængigheder i PL/SQL

  2. Bruger du sqlalchemy dburi med Oracle ved hjælp af External Password Store?

  3. Implementer Django-projekt på Google Cloud App Engine med eksterne biblioteker

  4. ORA-38868