如何选择与MYSQL中其他表中多行的交集匹配的行?

时间:2010-08-03 06:52:10

标签: mysql select intersection

看起来很复杂(可能是这样)。但我无法想象如何解决这个问题。

有桌子:

公司
id |名称
1 |谷歌
2 |三星
3 |微软

PARAGRAPHS
id |名称
1 |头
2 |车身
3 |页脚

代码
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 | paragraph_id | TAG_ID
1 | 2 | 1
1 | 2 | 2

我需要选择属于逻辑AND 属于段落的[any_number]标签的所有公司。

因此,在上面的例子中,Body段应输出唯一的公司“Microsoft”。

ADD:我只能使用 WHERE和SubQueries :这是我必须使用的CMS的限制。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您只需要加入所有表:

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