同时连接几个表:
我使用下面的SQL语句:同时连接几个表:
SELECT reply.id, reply.content, author.username
FROM thread, reply, author
JOIN thread_reply ON thread.id = thread_reply.thread_id
JOIN reply ON thread_reply.reply_id = reply.id
JOIN author_reply ON thread.id = author_reply.thread_id
JOIN author ON author_reply.author_id = author.id
WHERE thread.id = '40'
我有follwing表:
thread_reply: thread_id, reply_id
reply: id, content, created (timestamp)
author: id, username, password_hash, salt #etc
thread: id, content, created
author_reply: author_id, reply_id
我不断收到以下错误:
#1066 - Not unique table/alias: 'reply'
哦,我正在使用MySQL。
SELECT reply.id, reply.content, author.username
FROM thread
INNER JOIN thread_reply ON thread.id = thread_reply.thread_id
INNER JOIN reply ON thread_reply.reply_id = reply.id
INNER JOIN author_reply ON thread.id = author_reply.thread_id
INNER JOIN author ON author_reply.author_id = author.id
WHERE thread.id = '40'
没有author_reply.thread_id – 2011-04-01 14:29:38
你是对的,它应该是INNER JOIN author_reply ON reply.id = author_reply.reply_id – dcarneiro 2011-04-01 14:39:10
我选择了这个,因为它帮助找到正确的答案 – 2011-04-01 14:44:48
你有一个隐含的CROSS JOIN
和reply
之间thread
,author
原始查询,并且加入第二次相同的表不走样他们。
使用此:
SELECT reply.id, reply.content, author.username
FROM thread t
JOIN thread_reply tr
ON tr.thread_id = t.id
JOIN reply r
ON r.id = tr.reply_id
JOIN author_reply ar
ON ar.reply_id = r.id
JOIN author a
ON a.id = ar.author_id
WHERE thread.id = '40'
要包括的FROM
子句中的表,然后加入到他们以及 - 我想你想简单地FROM thread
,然后你的加入。
你,说
JOIN author_reply ON thread.id = author_reply.thread_id
有根据给出的定义在author_reply表中没有thread_id,则该行得到了一个错误。
这工作:
SELECT reply.id, reply.content, author.username
FROM thread
JOIN thread_reply ON thread.id = thread_reply.thread_id
JOIN reply ON thread_reply.reply_id = reply.id
JOIN author_reply ON reply.id = author_reply.reply_id
JOIN author ON author_reply.author_id = author.id
WHERE thread.id = '40'
你不应该明确从'reply'选择和'author'如果你要加入他们的行列。 – 2011-04-01 14:18:15
我的头痛... – 2011-04-01 14:22:56
'thread_reply'和'author_reply'表有什么意义?一个回复可以引用多个线程吗?一个答复可以有多个作者吗? – Quassnoi 2011-04-01 14:31:40