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

MINUS di MySQL?

Dengan asumsi tabel Topic_Tags Anda unik, ini menjawab tepat . Anda pertanyaan - tetapi mungkin tidak dapat digeneralisasikan untuk masalah Anda yang sebenarnya:

SELECT
  TopicId
FROM Topic_Tags
JOIN Tags ON
  Topic_Tags.TagId = Tags.TagId
WHERE
  Tags.Name IN ('A', 'B', 'C', 'D', 'E', 'F')
GROUP BY
  TopicId
HAVING
  COUNT(*) = 3 
  AND MAX(Tags.Name) = 'C'

Solusi yang lebih umum adalah:

SELECT 
    * 
FROM (
    SELECT
        TopicId
    FROM Topic_Tags
    JOIN Tags ON
        Topic_Tags.TagId = Tags.TagId
    WHERE
        Tags.Name IN ('A', 'B', 'C')
    GROUP BY
        TopicId
    HAVING
        COUNT(*) = 3 
) as GoodTags
LEFT JOIN (
    SELECT
        TopicId
    FROM Topic_Tags
    JOIN Tags ON
        Topic_Tags.TagId = Tags.TagId
    WHERE
        Tags.Name = 'D'
        OR Tags.Name = 'E'
        OR Tags.Name = 'F'
) as BadTags ON
    GoodTags.TopicId = BadTags.TopicId
WHERE
    BadTags.TopicId IS NULL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menyebarkan Server Percona untuk MySQL untuk Ketersediaan Tinggi

  2. PHP MySQL Google Chart JSON - Contoh Lengkap

  3. Bagaimana cara menyegarkan dropdown tanpa penyegaran halaman?

  4. SQL :Menggunakan tabel target dalam pernyataan UPDATE dalam klausa FROM bersarang

  5. Sinkronkan DB lokal besar dengan DB server (MySQL)