Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL сравнява и изключва правилно резултатите

Сега мисля, че го разбирам.

Ако потребителите имат само един отговор за всеки въпрос, тогава това трябва да работи:

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

РЕДАКТИРАНЕ:

Разбира се, потребителите могат има множество отговори. Това ме тласка към join подход, а не само обобщен подход. За съжаление, такъв подход се нуждае от full outer join , което MySQL не поддържа. Така че, нека първо опитаме да обобщим по отговор. Имате само двама потребители, така че ще завъртим стойностите:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL сравнява и изключва правилно резултатите

  2. Бавни заявки на инструмента за отстраняване на грешки в MySQL?

  3. Какво представляват InnoDB и MyISAM в MySQL?

  4. Класиране в PHP и MySQL

  5. Моделиране на връзка много към много в JPA/Hibernate