8

表1の例:

id | field1 | field2
--------------------

表2:

id | id1 | field1 | field2
--------------------------

これを行うことは可能ですか?

select t1.*, t2.* from table1 t1 inner join table2 t2 on t1.id = t2.id1

そしてこの結果を受け取ります:

t1_id | t1_fiedl1 | t1_field2 | t2_id | t2_id1 | t2_fiedl1 | t2_field2
----------------------------------------------------------------------

目標は、mysqlが結果のフィールドにプレフィックスを自動追加するようにして、次のような長い入力を回避することです。

select t1.id as t1_id, t1.field1 as t1_field1

等々

4

4 に答える 4

4

SQLエンジンは、クエリを「自動エイリアス」フィールドに書き換えません。エイリアスは明示的である必要があります。

ただし、クライアントコードには2つのオプションがあります。

まず、クエリをつなぎ合わせてエイリアスを提供する抽象化を明らかに作成できます。

次に、より簡単なのは、各結果セットに関連付けられた基礎となるMYSQL_FIELD構造で公開されている情報を使用することです。これらには、各フィールドに関するフィールド名とテーブル名(およびその他の情報)が含まれているためt1_field1、事前にフィールド名を知らなくても、プログラムでつなぎ合わせることができます。この情報がどのように公開されるかは、特定のクライアントAPIによって異なります。

于 2012-10-31T12:59:23.700 に答える
2

目標は、mysqlが結果のフィールドにプレフィックスを自動追加するようにして、次のような長い入力を回避することです。

select t1.id as t1_id, t1.field1 as t1_field1 and so on

フィールド名が両方のテーブルで同じである場合、両方のテーブルから列を取得することはありません。
これを実現するには、特定のエイリアスを使用して列名を記述する必要があります。

例えば

SELECT t1.id t1_id, t1.field1 t1_fiedl1, t1.field2 t1_field2 
      ,t2.id t2_id, t2.id1 t2_id1 ,t2.field1 t2_fiedl1, t2.field2 t2_field2
FROM   table1 t1 
INNER  JOIN table2 t2 
         ON t1.id = t2.id1

このSQLFiddleデモを見る

両方のテーブルのフィールド名が異なる場合は、それを実行して目的の結果を得ることができます。

例えば

SELECT     t1.*, t2.*
FROM       table1 t1 
INNER JOIN table2 t2 
        ON t1.id = t2.id1;

このSQLFiddleを参照してください

于 2012-10-31T12:36:22.837 に答える
0

いいえ、mysqlは列に自動的にプレフィックスを付けません。あなたがする唯一のことは、手動でalias列の周りを追加することです。それをしたくない場合は、各テーブルから一意の名前を付けるように列の名前を変更するのが最善の方法です。を追加せずalias、同じ名前の列がある場合、最初のテーブルの列が表示される傾向があります。テーブル間の名前の衝突のため、これは正常です。

于 2012-10-31T13:01:25.713 に答える
-1
select t1.id as t1_id, t1.fiedl1  as t1_fiedl1 ,
    t1.field2  as t1_field2 ,t2.id as  t2_id , 
     ,t2.fiedl1  as t2_fiedl1 ,t2.field2 as  t2_field2
    from table1 t1 left outer join table2 t2 on t1.id = t2.id1
于 2012-10-31T12:30:32.587 に答える