sql >> Databasteknik >  >> RDS >> Mysql

MySQL jämför och utesluter resultat korrekt

Nu tror jag att jag förstår det.

Om användarna bara har ett svar för varje fråga, bör detta fungera:

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:

Naturligtvis kan användare har flera svar. Detta driver mig mot en join tillvägagångssätt snarare än ett aggregat-endast. Tyvärr behöver ett sådant tillvägagångssätt en full outer join , som MySQL inte stöder. Så låt oss försöka aggregera efter svar först. Du har bara två användare, så vi pivoterar värdena:

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. Hur startar man MySQL-server från kommandoraden på Mac OS Lion?

  2. Autoload resultat som hämtar samma resultat om och om igen

  3. Hur man rensar MySQL-skärmen som öppnas via MySQL Command Line Client på Windows XP

  4. Är det ok att använda oracle 11g-klient med en 10g-server?