Mysql加入问题

时间:2010-08-25 13:53:00

标签: mysql

我需要查询帮助。

我有4张桌子

文章 - id,category_id,user_id
类别 - id
article_category - article_id,category_id
用户 - id

使用文章表中的category_id确定主要类别

现在我想获得所有文章,所以我使用下面的查询。

文章可以有多个类别。我希望看到附有主要类别信息的文章列表

选择a。*,c.title,c.slug 来自文章a,article_category ac,类别c,用户u
WHERE ac.article_id = a.category_id 应该是 ac.article_id = a.id
AND ac.category_id = c.id
AND a.user_id = u.id
AND ac.category_id ='1'

这个查询的问题是我得到了不正确的类别信息,我不认为我应该像下面那样运行子查询来解决它

(从id = a.category_id的类别中选择标题)作为标题

由于

4 个答案:

答案 0 :(得分:0)

您的加入条款不正确。我用ANSI语法重写它以使其更具可读性,并且JOIN子句更明确:

SELECT a.*, c.title , c.slug
FROM articles a
INNER JOIN article_category ac on ac.category_id = a.category_id
INNER JOIN categories c on ac.category_id = c.id
INNER JOIN users u on a.user_id = u.id
WHERE ac.category_id = '1'

顺便提一下,您正在联接users表,但没有从中选择任何列,因此您可以删除该连接,除非您使用它来过滤结果。

答案 1 :(得分:0)

从查询中删除了users表(根本没有使用),将条件从ac.article_id = a.category_id更改为ac.category_id = a.category_id

      SELECT a.*, c.title , c.slug 
      FROM articles a, article_category ac, categories c
      WHERE ac.category_id = a.category_id
      AND ac.category_id = c.id
      AND ac.category_id = '1'

答案 2 :(得分:0)

select a.*, c.title, c.slug
from articles a
join article_category ac on a.id = ac.article_id
join categories c on ac.category_id = c.id
join users u on a.user_id = u.id
where c.id = 1

答案 3 :(得分:0)

你加入了article_id = category_id,这没有意义,试试吧:

SELECT a.*, c.title , c.slug FROM articles a, article_category ac, categories c, users u
WHERE ac.category_id = a.category_id
AND ac.category_id = c.id
AND a.user_id = u.id
AND ac.category_id = '1'