我希望能够根据两个“类别”从“文章”表中获取行,但是我的联接遇到了问题。这是我的表格的样子:
`articles` ( `article_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `article_name` varchar(255) NOT NULL PRIMARY KEY (`article_id`) )
`article_categories` ( `article_id` smallint(5) unsigned NOT NULL, `category_id` smallint(5) unsigned NOT NULL UNIQUE KEY `article_category_id` (`article_id`,`category_id`), KEY `article_id` (`article_id`), KEY `category_id` (`category_id`) )
现在我想要做的是获取所有类别3和5(或无限数量的类别)的文章。我以为我可以这样做:
SELECT * FROM articles a INNER JOIN article_categories ac ON ac.article_id = a.article_id WHERE (ac.category_id = 3 AND ac.category_id = 5)
只是为了澄清我不想要3或5中的文章,但是3和5都是。
我认为这是因为疲倦或其他原因我错过了一些非常简单的事情。
或者我将要为我想要包括的每个类别进行另一次连接,例如:
SELECT a.* FROM articles a INNER JOIN article_categories ac ON ac.article_id = a.article_id INNER JOIN article_categories ac2 ON ac2.article_id = a.article_id WHERE (ac2.category_id = 3 AND ac.category_id = 5)
但我确信有一个更简单的解决方案。
答案 0 :(得分:1)
试
select
articles.article_id
from
articles,
article_categories
where
articles.article_id=article_categories.article_id and
article_categories.category_id in(3,5)
group by
article_categories.article_id
having count(*)>=2;
答案 1 :(得分:0)
1)以下查询应该有效(我没有测试过)
select art.*
from
articles art
inner join cat1 on cat1.article_id = art.article_id
inner join cat2 on cat2.article_id = art.article_id
where
cat1.category_id = 3
and cat2.category_id = 5
2)您的数据模型错误。你应该有3个表:aticle,category和aticle_to_category, 表名不应该是plurar形式。
答案 2 :(得分:0)
另一种选择是:
SELECT article_id FROM (SELECT article_id, count(*) AS cat FROM article_categories WHERE category_id IN (3,5,7)) arts WHERE arts.cat = 3;