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

Memfilter dari tabel gabungan

JOIN solusi:

SELECT t.*
FROM topics t
 JOIN tags_topics t1 ON (t.id = t1.topicId AND t1.tagId = 1)
 JOIN tags_topics t2 ON (t.id = t2.topicId AND t2.tagId = 2)
 JOIN tags_topics t3 ON (t.id = t3.topicId AND t3.tagId = 3)

GROUP BY solusi:

Perhatikan bahwa Anda perlu membuat daftar semua t.* kolom di GROUP BY klausa, kecuali jika Anda menggunakan MySQL atau SQLite.

SELECT t.*
FROM topics t JOIN tags_topics tt 
  ON (t.id = tt.topicId AND tt.tagId IN (1,2,3))
GROUP BY t.id, ...
HAVING COUNT(*) = 3;

Solusi subkueri:

SELECT t.*
FROM topics t
WHERE t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 1)
  AND t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 2)
  AND t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 3);

Dimodifikasi GROUP BY solusi:

Menyederhanakan GROUP BY klausa dengan mengisolasi pencarian dalam subquery.

SELECT t.*
FROM topics t
WHERE t.id IN (
  SELECT tt.topicId FROM tags_topics tt 
  WHERE tt.tagId IN (1,2,3))
  GROUP BY tt.id HAVING COUNT(*) = 3
);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Susunan MySQL mana yang sama persis dengan perbandingan string PHP?

  2. Meniru TO_SECONDS() di versi MySQL yang lebih lama (<5.5.0)

  3. ALTER TABLE ADD COLUMN butuh waktu lama

  4. Memasukkan nilai yang bertambah ke dalam sql ini

  5. Bagaimana menganggap NULL sebagai tanggal MAX alih-alih mengabaikannya di MySQL?