J'ai 3 tables:requête SQL - JOIN sur toutes les lignes d'une précédente rejoindre
- pages (id, nom, desc)
- page_tags (id, page_id, tag_id)
- tag_posts (tag_id, post_id)
Compte tenu d'une page dans le tableau des pages, je veux obtenir des postes dans la table où tag_posts correspond tag_id ALL tag_ids pour la page indiquée dans la table page_tags.
Par exemple, si les entrées dans les 3 tables sont:
1) pages: [ 'page 1' 1, 'une certaine desc']
2) page_tags:
- [1, 1, 1],
- [2, 1, 2]
3) tag_posts:
- [1, 101],
- [2, 102],
- [1, 201],
- [3, 202]
j'ai fait simple jointure interne des 3 tables utilisant cette requête:
SELECT tp.*
FROM pages p
JOIN page_tags pt ON pt.page_id = p.id
JOIN tag_posts tp ON tp.tag_id = pt.tag_id
WHERE 1
Cependant, cela renvoie les lignes 1, 2 et 3 de la table échantillons de tag_posts ci-dessus alors que je voulais que les lignes 1 et 2 comme ces deux lignes correspondent ALL les lignes tag_id de la première jointure entre les pages et la table page_tags.
S'il vous plaît laissez-moi savoir comment je peux y parvenir. Note: J'utilise mysql.
Ma première jointure est entre les pages et page_tags et il me donne tous les tags pour une page donnée. Je veux que la deuxième jointure me donne des posts qui correspondent à tous les tags de la première jointure. J'espère avoir exprimé clairement mes exigences. – Rainbard
Votre inscription est correcte.Dans votre exemple ci-dessus, la page 1 est référencée deux fois dans la table page_tags. En anglais, la page 1 contient des tags avec les identifiants 1 et 2. Ces tags sont référencés 3 fois dans la table tag_posts. Dans la table tag_posts, les étiquettes de référence 1 et 3 des lignes 1 et 3 et 2 désignent la balise 2. C'est pourquoi vous obtenez 3 balises pour les balises 1 et 2. Faites-moi savoir si j'interprète mal vos tables. –