sql >> Database >  >> RDS >> Mysql

Filteren vanuit de join-tabel

JOIN oplossing:

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 oplossing:

Merk op dat u alle t.* . moet vermelden kolommen in de GROUP BY clausule, tenzij u MySQL of SQLite gebruikt.

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;

Subquery-oplossing:

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

Aangepast GROUP BY oplossing:

Vereenvoudigt GROUP BY clausule door zoeken in een subquery te isoleren.

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. node-server kan geen verbinding maken met postgres db

  2. php echo werkt niet

  3. Tomcat6 kan geen verbinding maken met MySql (het stuurprogramma heeft geen pakketten van de server ontvangen)

  4. Recursieve/hiërarchische zoekopdracht met Postgres