2016-11-01 11 views
2

2つのテーブルを結合するselectがあるので、これらのテーブルと似た名前のカラムがあるので、結果を取得するときにFireDacはアンダースコア1を私はこれをしなければならないだろうな名前のフィールドからレコードを取得するとき2FireDacでアンダースコア1を追加すると、同じ名前の2つのカラム名を区別する

Select * from Table1 inner join Table2 on 
Table1.id = Table2.id 

を区別するために第二のカラム名...

Dataset.FieldByName('Name').asInteger 
Dataset.FieldByName('Name_1').asInteger 

私はへの設定があるかどうかを知りたいです_1を他のものに変更してください、私はこれを変更したいのですInterbaseを使用して1だけを追加したものです。

答えて

0

select * fromを使用しないでください。フェッチする列に名前を付け、エイリアスを定義し、テーブル名(またはエイリアス)を使用して一意の名前を作成します。

select t1.Name as Name1, t2.Name as Name2 from Table1 t1 inner join Table2 t2 on t1.Name = t2.Name

あなたは今、私はこのような構成を認識していないよ、このよう

Dataset.FieldByName('Name1').asInteger; 
+2

を私は疑問に思って。 't1.Name'のようなアドレス指定フィールドはFireDacの機能ですか? –

+2

これはFireDacでうまくいくのですか?これはADOでは機能せず、OPで説明したのと同じ動作をします。 – kobik

+0

@kobik。正確に - それは私が最初にチェックしたものです:) –

1

それらの値を取得することができます。私が考えることができる唯一のオプションは、SELECT *を使用するのではなく、実際にの必要な列を選択すると、同じ列名にエイリアスが必要です。

SELECT Table1.Name, Table2.Name AS Name1, ... from Table1 inner join Table2 on 
Table1.id = Table2.id 

か、あなたが使用することができますSELECT *必見使用Table1からすべての列を必要とします場合:

SELECT Table1.*, Table2.Name AS Name1, ... 

も参照してください:Why is “Select * from table” considered bad practice

+0

フィールドの多くを必要とするため、実際に避けようとしていたのが – Fero

+0

@ Fero68です。他の選択肢はありません。あなたが望むものはAFAIKできません。 – kobik

関連する問題