114

私は2つのテーブルを持っています。両方のフィールドが含まれていますtbl_names。常にこのエラーが発生するため、フィールドを選択するにはどうすればよいですか。tbl_sectionidid

1052: Column 'id' in field list is ambiguous

これが私のクエリです:

SELECT id, name, section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id

すべてのフィールドを選択するだけで、エラーを回避できました。しかし、それはパフォーマンスの無駄になります。私は何をすべきか?

4

8 に答える 8

179

SQL は、参照の前に完全なテーブル名を付けて列を修飾することをサポートしています。

SELECT tbl_names.id, tbl_section.id, name, section
  FROM tbl_names
  JOIN tbl_section ON tbl_section.id = tbl_names.id 

...またはテーブルエイリアス:

SELECT n.id, s.id, n.name, s.section
  FROM tbl_names n
  JOIN tbl_section s ON s.id = n.id 

テーブル エイリアスを使用することをお勧めします。必要以上に入力する必要はありません。

これらのクエリが異なって見えるのはなぜですか?

次に、私の回答では ANSI-92 JOIN 構文を使用しています (あなたの回答は ANSI-89 です)。それらは同じように実行されますが、ANSI-89 構文は OUTER 結合 (RIGHT、LEFT、FULL) をサポートしていません。ANSI-89 構文は非推奨と見なす必要があります。SO には、それを強化するために ANSI-89 構文に投票しない人がたくさんいます。詳細については、この質問を参照してください

于 2011-07-10T01:31:35.683 に答える
20

SELECTステートメントでは、ID の前に選択したいテーブルを付ける必要があります。

SELECT tbl_names.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id

また

SELECT tbl_section.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id
于 2011-07-10T01:11:48.577 に答える
6

たとえば、次のように完全修飾名を指定します。

SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id

これにより、tbl_names の ID が得られます

于 2011-07-10T01:12:07.703 に答える
4

あなたの質問にはすでにたくさんの答えがあります。このようにすることもできます。テーブルにエイリアス名を付けて、次のように選択クエリで使用できます。

SELECT a.id, b.id, name, section
FROM tbl_names as a 
LEFT JOIN tbl_section as b ON a.id = b.id;
于 2016-05-25T06:28:54.673 に答える
-1
SELECT tbl_names.id, tbl_names.name, tbl_names.section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id
于 2017-05-22T13:47:23.383 に答える