0
TableA                            TableB
Column1    Column2                Column3    Column4
1          2                      1          3

私は2つのテーブルTableA(Column1、Column2)とTableB(Column3、Column4)を持っています.column1、column4(LIKE NATURAL JOIN)を使用して2つのテーブルを結合したいです。SQLで2つのテーブルを結合し、繰り返される列を削除して新しいテーブルを返すことはありますか?

これを選択したい:

column1  column2  column4
1        2        3
4

3 に答える 3

3

サポートする 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。そして、それが機能するかどうかさえわかりません。

于 2013-04-19T19:56:08.740 に答える
1

2 つのテーブルを結合し、一部またはすべての列に対してクエリを実行すると、新しいテーブルではなくレコード セットが返されます。欲しかったものを手に入れるには、これを試してください。以下のクエリは SQL 標準に準拠しているため、すべての SQL 準拠データベースで動作するはずです。

SELECT ta.column1, ta.column2, tb.column4 from TableA ta INNER JOIN TableB tb ON     (ta.column1 = tb.column4)

Natural Join を使用する場合は、同じ列が必要です。

于 2013-04-19T19:56:22.583 に答える