Как выбрать строки, которые соответствуют пересечению нескольких строк в других таблицах в MYSQL? - PullRequest
0 голосов
/ 03 августа 2010

Это кажется сложным (и, вероятно, это так). Но я не представляю, как это решить.

Есть таблицы:

ПРЕДПРИЯТИЯ
id | Имя
1 | Google
2 | Samsung
3 | Microsoft

ПУНКТЫ
id | Имя
1 | Заголовок
2 | Тело
3 | Нижний колонтитул

TAGS
id | тег
1 | Интернет
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 | идентификатор_пункта | tag_id
1 | 2 | 1
1 | 2 | 2

Мне нужно выбрать все компании, которые принадлежат [any_number] тегов, принадлежащих абзацу, по логическому И .

Итак, в приведенном выше примере параграф Body должен выводить единственную компанию «Microsoft».

ДОБАВИТЬ: я могу использовать только ГДЕ и подзапросы : это ограничение CMS, которое я должен использовать.

Ответы [ 2 ]

1 голос
/ 03 августа 2010
0 голосов
/ 03 августа 2010

Вам просто нужно объединить все ваши столы:

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"; 
...