看起来很复杂(可能是这样)。但我无法想象如何解决这个问题。
有桌子:
公司
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的限制。
答案 0 :(得分:1)
了解INNER JOIN
的工作原理。
http://dev.mysql.com/doc/refman/5.1/en/join.html
http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
答案 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";