2010-08-03 5 views
0

Cela semble compliqué (et c'est probablement le cas). Mais je ne peux pas imaginer comment résoudre cela.Comment sélectionner des lignes qui correspondent à l'intersection de plusieurs lignes dans d'autres tables dans MYSQL?

Il y a des tables:

ENTREPRISES
id | nom
1 | Google
2 | Samsung
3 | Microsoft

PARAGRAPHES
id | nom
1 | En-tête
2 | Corps
3 | Pied de page

TAGS
id | tag
1 | Internet
2 | Softwate

COMPANIES_VS_TAGS
id | company_id | tag_id
1 | 1 | 1
2 | 2 | 2
3 | 3 | 1
4 | 3 | 2

PARAGRAPHS_VS_TAGS
id | paragraph_id | tag_id
1 | 2 | 1
1 | 2 | 2

Je dois sélectionner toutes les sociétés qui appartiennent à [any_number] de balises appartenant au paragraphe logique AND. Ainsi, dans l'exemple ci-dessus, le paragraphe Body devrait sortir la seule société "Microsoft".

AJOUTER: Je peux utiliser seulement O WH et SubQueries: c'est la limitation de CMS que je dois utiliser.

Répondre

0

Il vous suffit de joindre toutes vos tables:

SELECT companies.id, 
     companies.name 
FROM companies, 
     tags, 
     companies_vs_tags, 
     paragraphs_vs_tags 
WHERE companies.id = companies_vs_tags.company_id 
     AND tags.id = companies_vs_tags.tag_id 
     AND tags.id = paragraphs_vs_tags.tag_id 
     AND paragraphs.id = paragraphs_vs_tags.paragraph_id 
     AND paragraphs.name = "Microsoft"; 
+0

Soory, mais cette requête (moins la dernière ligne) produit logique ** OU **, de sorte que je reçois toutes les entreprises ((( – admit

+1

J'ai besoin de l'entreprise qui ont ** les deux étiquettes ** en même temps – admit

Questions connexes