sql >> Databáze >  >> RDS >> Mysql

Filtrování z tabulky spojení

JOIN řešení:

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 řešení:

Upozorňujeme, že musíte uvést všechny t.* sloupců v GROUP BY klauzule, pokud nepoužíváte MySQL nebo 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;

Řešení dílčího dotazu:

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

Upraveno GROUP BY řešení:

Zjednodušuje GROUP BY klauzule izolováním vyhledávání v dílčím dotazu.

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. Převod CLOB na NUMBER pro porovnání - Oracle

  2. Vrácení „posledního“ řádku každého „seskupit podle“ v MySQL

  3. Nelze VYBRAT z klauzule UPDATE RETURNING v postgresu

  4. Jak zobrazím výstupní parametr CLOB v TOAD z uložené procedury Oracle?