2つのテーブルがあります。 tbl_names
とtbl_section
には、id
フィールドの両方が含まれています。 id
フィールドを選択するにはどうすればよいですか。これは常にこのエラーが発生するためです。
1052: Column 'id' in field list is ambiguous
私のクエリは次のとおりです。
SELECT id, name, section
FROM tbl_names, tbl_section
WHERE tbl_names.id = tbl_section.id
すべてのフィールドを選択するだけで、エラーを回避できます。しかし、それはパフォーマンスの無駄になります。私は何をすべきか?
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構文に投票しない人が多くいます。 詳細については、この質問をご覧ください 。
SELECT
ステートメントでは、選択するテーブルをIDの前に付ける必要があります。
SELECT tbl_names.id, name, section
FROM tbl_names
INNER JOIN tbl_section
ON tbl_names.id = tbl_section.id
OR
SELECT tbl_section.id, name, section
FROM tbl_names
INNER JOIN tbl_section
ON tbl_names.id = tbl_section.id
次のように、完全修飾名を指定することでそれを行うことができます。
SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id
これはtbl_namesのIDを提供します
すでにあなたの質問にはたくさんの答えがあります。あなたもこのようにできます。テーブルにエイリアス名を付け、次のように選択クエリで使用できます。
SELECT a.id, b.id, name, section
FROM tbl_names as a
LEFT JOIN tbl_section as b ON a.id = b.id;
おそらくここで本当にやりたいことは、次のような共用体演算子を使用することです。
(select ID from Logo where AccountID = 1 and Rendered = 'True')
union
(select ID from Design where AccountID = 1 and Rendered = 'True')
order by ID limit 0, 51
こちらがそのドキュメントです https://dev.mysql.com/doc/refman/5.0/en/union.html
最も簡単な解決策は、USING
の代わりにON
との結合です。そうすれば、データベースは両方のid
列が実際に同じであることを「認識」し、それを軽視しません。
SELECT id, name, section
FROM tbl_names
JOIN tbl_section USING (id)
id
がtbl_names
およびtbl_section
の唯一の共通列名である場合、NATURAL JOIN
を使用することもできます。
SELECT id, name, section
FROM tbl_names
NATURAL JOIN tbl_section
2つのテーブルのIDの形式が異なる場合は、それらを結合する必要があります。たとえば、table_customes
とtable_orders
があり、注文のIDが "- 101 "、" 102 "..." 11 "、顧客に1つだけを使用
select customers.id, name, amount, date from customers.orders;