サポートする DBMSNATURAL JOIN
では、結合キーの列名が一致する必要があり、一致する場合SELECT *
、一意の列名のみが取得されます。列名を指定しようとしても意味がありません。なぜなら、名前が既に同じであることによってすべてが機能するからです。
結合を実行するためにそれらの間のすべての同じ名前の列を使用するため、2 つのテーブル間に同じ名前の列が必要です。テーブルTableA
とテーブルTableB
は、列名を共有していないため、自然結合には適していません。
したがって、通常の参加に追いやられます。
SELECT
A.*, -- you can at least get all the columns from one table
B.Column4 -- but you have to specify the rest one at a time
FROM
TableA A
INNER JOIN TableB B
ON A.Column1 = B.Column3
;
弾丸を噛んでクエリを書くだけです。列名を書きたくない場合もありますが、それは不可能です。
いくつかのメモ:「新しいテーブルを返す」と言うとき、私はあなたが何を意味するかを知っていると思いますが、技術的には、テーブルになるには名前を付けてデータベースに保存する必要があるため、行セットです。
ビューまたはインライン派生テーブルで列に別名を付けることができる場合がありますが、使用している特定の DBMS を教えていただけないため、その正確な機能について回答できます。次のようになります。
SELECT
*
FROM
TableA A
NATURAL JOIN (
SELECT Column1 = Column3, Column4
FROM TableB B
) B
;
ただし、これを行うには、他のすべての列をリストする必要があることに注意してくださいTableB
。そして、それが機能するかどうかさえわかりません。