Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL membandingkan dan mengecualikan hasil dengan benar

Sekarang saya pikir saya memahaminya.

Jika pengguna hanya memiliki satu jawaban untuk setiap pertanyaan, maka ini akan berhasil:

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:

Tentu saja, pengguna bisa memiliki banyak jawaban. Ini mendorong saya ke arah join pendekatan daripada pendekatan agregat saja. Sayangnya, pendekatan seperti itu memerlukan full outer join , yang tidak didukung MySQL. Jadi, mari kita coba menggabungkan dengan jawaban, pertama. Anda hanya memiliki dua pengguna, jadi kami akan memutar nilainya:

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 tersedak kutipan keriting (pintar)

  2. Mengapa ini tidak menerima alamat email dengan tanda hubung setelah @?

  3. Menjalankan Galera Cluster di Kubernetes

  4. Hitung jumlah karakter unik dalam sebuah string

  5. Replikasi Master Mysql Master