これは私のテーブル構造です:
エラーメッセージは次のとおりです。
#1066-一意ではないテーブル/エイリアス: 'user'
以下は私のコードです。
SELECT article.* , section.title, category.title, user.name, user.name
FROM article
INNER JOIN section ON article.section_id = section.id
INNER JOIN category ON article.category_id = category.id
INNER JOIN user ON article.author_id = user.id
LEFT JOIN user ON article.modified_by = user.id
WHERE article.id = '1'
2回目に参加するときは、ユーザーテーブルにエイリアスを与える必要があります。
例えば.
SELECT article . * , section.title, category.title, user.name, u2.name
FROM article
INNER JOIN section ON article.section_id = section.id
INNER JOIN category ON article.category_id = category.id
INNER JOIN user ON article.author_id = user.id
LEFT JOIN user u2 ON article.modified_by = u2.id
WHERE article.id = '1'
あなたのエラーはあなたが持っているためです:
JOIN user ON article.author_id = user.id
LEFT JOIN user ON article.modified_by = user.id
同じテーブルの2つのインスタンスがありますが、データベースはどちらがどれであるかを判別できません。これを修正するには、table aliasesを使用する必要があります。
JOIN USER u ON article.author_id = u.id
LEFT JOIN USER u2 ON article.modified_by = u2.id
このような状況が発生していないときに常に完全なテーブル名を書き込むのが好きでない限り、常にテーブルにエイリアスを設定することをお勧めします。
次に取り組む問題は次のとおりです。
SELECT article.* , section.title, category.title, user.name, user.name
1)SELECT *
は絶対に使用しないでください。テーブル全体であっても、必要な列を必ず入力してください。 これを読むSO理由を理解するための質問 。
2)user.name
列に関連するあいまいな列エラーが発生します。これも、データベースがどのテーブルインスタンスからデータをプルするかを判断できないためです。テーブルエイリアスを使用すると、問題が修正されます。
SELECT article.* , section.title, category.title, u.name, u2.name
FROM句で「ユーザー」を2回指定しました。ユーザーの言及ごとに、少なくとも1つの言及にテーブルエイリアスを提供する必要があります。いずれかのインスタンスに固定できます。
FROM article INNER JOIN section
ON article.section_id = section.id
INNER JOIN category ON article.category_id = category.id
INNER JOIN user **AS user1** ON article.author\_id = **user1**.id
LEFT JOIN user **AS user2** ON article.modified\_by = **user2**.id
WHERE article.id = '1'
(別のものが必要になる場合があります-私はどちらのユーザーがどちらであるかを推測しましたが、SQLエンジンは推測しません。)
また、多分あなたはたった1人の「ユーザー」しか必要としませんでした。知るか?
SELECT art.* , sec.section.title, cat.title, use1.name, use2.name as modifiedby
FROM article art
INNER JOIN section sec ON art.section_id = sec.section.id
INNER JOIN category cat ON art.category_id = cat.id
INNER JOIN user use1 ON art.author_id = use1.id
LEFT JOIN user use2 ON art.modified_by = use2.id
WHERE art.id = '1';
これが役に立てば幸い