JOIN 3表查询

时间:2010-08-24 13:26:29

标签: mysql join

好的,我们走了......

我有3个表:帖子,评论和成员,我需要从帖子中获取标题,来自评论的消息和来自成员的用户名。 所有表都具有相同的ID(?)

例如:我想从某个ID中获取这些数据......

抱歉,我的英语不好,不是我的语言,也不是我在MySQL上的基本技能(从今天开始)。

编辑: 这是我的架构:

posts:    |ID|title|
          ----------------
          |1 |post title|        (example data)

comments: |USERID|UID|msg|  (UID is same as posts.ID)
          -----------------
          |5     |1  |message|   (example data)    

members:  |USERID|username|
          -----------------
          |5     |myusername|    (example data)

当我向ID 80(例如)发出查询时,将返回标题,与该帖子相关联的消息(UID)以及与该评论相关联的用户名。

例如。如果帖子80有5条评论显示,帖子标题和评论用户名。

我认为这更清楚。 (NO 3)

4 个答案:

答案 0 :(得分:2)

也许是这样的:

SELECT P.Title, C.Message, M.Username
FROM   Posts P
INNER JOIN Comments C ON P.PostID = C.PostID
INNER JOIN Memmbers M ON C.MemberID = M.MemberID
WHERE P.PostID = 123

这是你的架构(我认为我的更好,这就是我离开它的原因):)

SELECT P.title, C.msg, M.username
FROM   posts P
INNER JOIN comments C ON P.ID = C.UID
INNER JOIN memmbers M ON C.USERID = M.USERID
WHERE P.ID = 80

在这种情况下,帖子标题会重复,但我相信这就是你所要求的。

答案 1 :(得分:0)

如果没有看到你的架构,我只能猜测,但我认为它可能看起来像这样:

SELECT p.title, c.msg, m.username
FROM Posts p
INNER JOIN Comments c ON (p.AssociateID = c.AssociateID)
INNER JOIN Members m ON (m.AssociateID = p.AssociateID)
WHERE p.AssociateID = 123

如果您的架构不同,请调整上面的SQL以适合您的表结构。

答案 2 :(得分:0)

首先,您的表结构(单数表名称)应如下所示:

发表: ID 标题 member_id

<强>注释: ID 味精 POST_ID member_id

<强>构件: ID 用户名

SELECT p.title, c.msg, m.username
FROM comment c
INNER JOIN post p ON p.id = c.post_id
INNER JOIN member m ON m.id = p.member_id
WHERE m.id = YOURUSERIDGOESHERE

答案 3 :(得分:0)

您还可以执行以下操作:

SELECT P.Title, C.Message, M.Username
FROM   Posts P, Comments C, Members M 
WHERE P.ID = C.UID 
AND C.USERID = M.USERID 
AND P.PostID = 80

这将产生与其他几个人建议的结果相同的结果,但是有些人认为WHERE更清楚地显示了关系。这只是个人偏好的问题。