2012-10-31 21 views
6

例TABLE1:MySQLのフィールドにプレフィックスを自動追加

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

表2:

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

と、この結果を受け取る:

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

それがこれを行うことは可能です

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 

ので

+1

試しましたか? – hims056

+0

ヘッダーを取得することができます。私はデータについてはわかりません。サンプルデータを提出し、期待する内容を説明してください。 –

+0

すべてのテーブルのテーブル名の3文字略語を使用します。 –

答えて

4

SQLエンジンはあなたのために、「自動エイリアス」フィールドにクエリを書き換えないであろう - エイリアスは、明示的でなければなりません。

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

まず、明示的にクエリをまとめて抽象化を作成し、その間にエイリアスを提供することができます。

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

+1

いくつかのコード例は素晴らしいでしょう。 – petermeissner

-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 
+0

質問のポイントは、すべてのフィールドを匿名で選択して、プレフィックスを依然として持つことができるようにすることです。 –

+0

この最新のソリューションを試す – jainvikram444

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 

See this SQLFiddle Demo

両方のテーブルのフィールド名が異なる場合は、あなたが希望する結果を達成するためにそれを行うことができます。

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

See this SQLFiddle

+1

私はそれを知っています。しかし、特に20以上のフィールドを持つテーブルで3つ以上のジョインを操作すると、本当に面倒です。そして、どのテーブルでも使われている 'name'フィールドの同義語はどうでしょうか?それが私が求めている理由です。たぶんもっと柔軟なソリューションがあるかもしれません。 – abr

+0

エンジンは常に投影内の*すべてのフィールドを返します。ただし、デフォルトの非修飾列名に基づいて行をフェッチするクライアントAPIでは、同じ「名前」を持つ複数の項目は表示されません。 SQLFiddleはそのようなAPIを使用しているように見えます。なぜなら、クエリでは 'id'と' id'を区別できないのですが、コマンドラインの 'mysql(1)'クライアントで可能です。 – pilcrow

0

いいえ、mysqlはカラムの前に自動的に接頭辞を付けません。。唯一行うことは、手動で列の周りにaliasを追加することです。それをやりたくない場合は、各テーブルの一意の名前を作る列の名前を変更するのが最善の方法です。aliasを追加せずに、同じ名前の列がある場合、最初の表の列が表示される傾向があります。これは、テーブル間の名前の衝突のために正常です。

関連する問題