22

これは私のテーブル構造です:

代替テキスト

エラーメッセージは次のとおりです。

#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'
4

4 に答える 4

41

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'
于 2009-09-16T20:08:10.297 に答える
9

あなたのエラーは、あなたが持っているためです:

     JOIN user ON article.author_id = user.id
LEFT JOIN user ON article.modified_by = user.id

同じテーブルの 2 つのインスタンスがありますが、データベースはどちらがどちらであるかを判断できません。これを修正するには、テーブル エイリアスを使用する必要があります。

     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
于 2009-09-16T20:29:05.147 に答える
7

FROM 句で「user」について 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 つだけだったかもしれません。知るか?

于 2009-09-16T20:11:07.877 に答える
-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';

これが役立つことを願っています

于 2019-04-23T05:00:38.770 に答える