1

これらの5つのテーブルをどのように結合できますか?

tag: id, name
author: username, id
thread_tags: thread_id, tag_id
thread: id, content
author_threads: author_id, thread_id

(author_tags(tag_id、author_id)というテーブルもありますが、ここでは必要ないと思います)。

特定のタグが付けられているすべてのスレッドとその作成者を選択したいと思います。

次のコードは#1066 - Not unique table/alias: 'tag'

SELECT thread.content, author.username
FROM tag
JOIN thread_tags ON thread.id = thread_tags.thread_id
JOIN tag ON thread_tags.tag_id = tag.id
JOIN author_threads ON author.id = author_threads.author_id
JOIN author ON author_threads.thread_id = thread.id
WHERE tag.name = 'arsenal'

編集:

これは機能します:

SELECT thread.content
FROM tag
JOIN thread_tags ON tag.id = thread_tags.tag_id
JOIN thread ON thread.id = thread_tags.thread_id
WHERE tag.name =  'tagged'
LIMIT 0 , 30

ただし、作成者をスレッドに参加させようとすると、#1066エラーがスローされます。

4

4 に答える 4

0

テーブルに2回参加しましたがtag(したがってエラー)、threadテーブルに参加していません。

SELECT thread.content, author.username
FROM tag
  JOIN thread_tags
    ON tag.id = thread_tags.tag_id
  JOIN thread                                  --join thread (not tag again)
    ON thread.id = thread_tags.thread_id
  JOIN author_threads
    ON author_threads.thread_id = thread.id     --error here too, in your query
  JOIN author
    ON author.id = author_threads.thread_id     --error here too, in your query
WHERE tag.name = 'arsenal'
于 2011-04-03T08:27:11.917 に答える
0

JOINにタグテーブルがあるのはなぜですか?これがエラーが発生する理由です。

JOIN tag ON thread_tags.tag_id = tag.id

ここにもテーブルタグがあります:

FROM tag

タグテーブルが2回登場しました。

于 2011-04-03T08:28:04.677 に答える
0

クエリにタグテーブルが2回あります。多分それが問題です。

于 2011-04-03T08:28:47.160 に答える
0
SELECT thread.content, author.username
FROM thread
LEFT JOIN thread_tags ON thread.id = thread_tags.thread_id
LEFT JOIN tag ON thread_tags.tag_id = tag.id
LEFT JOIN author_threads ON author.id = author_threads.author_id
LEFT JOIN author ON author_threads.thread_id = thread.id
WHERE tag.name = 'arsenal'

ところで-author_id`` inスレッド`テーブルを保存する方が良いのではないですか?

于 2011-04-03T08:28:58.447 に答える