MySQL加入两行

时间:2010-11-15 12:04:46

标签: mysql select join

我希望能够根据两个“类别”从“文章”表中获取行,但是我的联接遇到了问题。这是我的表格的样子:

`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)

但我确信有一个更简单的解决方案。

3 个答案:

答案 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;