データベース クエリを使用する場合、エラー 1066 が発生する場合があります。これは、テーブルが一意でないことを示します。別名。これは通常、適切なエイリアスを指定せずに同じテーブルを複数回結合した場合に発生します。
次のシナリオを考えてみましょう: user テーブル内の行を参照する author_id やmodified_by などの列を含むarticle テーブルがあるとします。 SQL クエリの目的は、記事テーブルからデータを取得し、作成者と記事を最後に変更したユーザーに関する情報を取得することです。ただし、クエリを実行すると、次のエラーが表示されます。
#1066 - Not unique table/alias: '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 つのインスタンスを区別せずに、エイリアス ユーザーを 2 回使用していることに注意してください。これによりデータベースが混乱し、「テーブル/エイリアスが一意ではありません」エラーが発生します。
この問題を解決するには、ユーザー テーブルに 2 回目に結合するときは、別名を使用します。これにより、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'
この更新されたクエリでは、2 番目のクエリがユーザーテーブルのインスタンスにはエイリアス u2 が与えられます。これにより、データベースは 2 つのインスタンスを区別してエラーを解決できるようになります。
以上がSQL エラー 1066: 「一意のテーブル/エイリアスではありません: 'user'」を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。