Объединение нескольких таблиц одновременно: - PullRequest
2 голосов
/ 01 апреля 2011

Я использую следующий оператор 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'

У меня есть следующие таблицы:

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.

Ответы [ 5 ]

3 голосов
/ 01 апреля 2011

В исходном запросе у вас было неявное CROSS JOIN между thread, author и reply, и вы во второй раз присоединились к одним и тем же таблицам без их наложения.

Используйте это:

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'
1 голос
/ 01 апреля 2011

Вы включаете таблицы в предложение FROM, а затем присоединяетесь к ним - я думаю, что вы хотите просто FROM thread, а затем ваши объединения.

1 голос
/ 01 апреля 2011
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'
0 голосов
/ 01 апреля 2011

Это работает:

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'
0 голосов
/ 01 апреля 2011

В строке появляется сообщение, что

JOIN author_reply ON thread.id = author_reply.thread_id

в вашей таблице author_reply нет идентификатора thread_id согласно приведенным определениям.

...