我无法弄清楚这个复杂的连接..
我有3张桌子:
我想通过帖子thread_id加入帖子ID,用帖子海报和帖子海报加入用户ID ..
主题:
文章:
的用户:
帮助非常感谢
答案 0 :(得分:4)
SELECT /* whatever */
FROM threads t
JOIN users tu ON t.poster = tu.id
JOIN posts p ON t.id = p.thread_id
JOIN users pu ON p.poster = u.id
基本上,如果我理解你的话,你只需要加入用户两次,一次来自帖子,一次来自帖子。
为什么线程和帖子之间有区别?这种建模决策可能会导致一些尴尬,如上所述。
对于这类事情,我倾向于选择adjacency list方法:每个帖子都有一个父级(有人回复的帖子),除非你没有做真正的线程,它只是一个帖子列表,比如一个典型的论坛。
这样线程就是没有父母的帖子。
你正在做的事情可以奏效但是一旦你进入列出用户所做的所有帖子(包括那些开始线程的帖子)之类的事情,这可能会很尴尬。突然你必须一起启动UNIONing表等等。
答案 1 :(得分:2)
怎么样?
select
Threads.*,
Posts.*,
Thread_poster.*,
Post_poster.*
from
Threads inner join Posts on Threads.ID = Posts.Thread_id
inner join Users as Thread_poster on Threads.Poster = Thread_poster.ID
inner join Users as Post_poster on Posts.Poster = Post_poster.ID
答案 2 :(得分:0)
这样的事情:
select *
from threads, posts, users
where threads.id = posts.thread_id
and users.ID = threads.poster
and users.ID = posts.poster
答案 3 :(得分:0)
您应该仅使用您真正想要的那些列替换星号列出的列,但我相信这可以达到您想要的效果。
select u.*, p.*, t.*
from users u inner join threads t on u.ID = t.Poster
inner join posts p on t.Poster = p.Poster and t.ID = p.Thread_id