2016-11-01 32 views
2

我有一個選擇連接兩個表,因此這些表中有與這些表具有相似名稱的列,所以現在當檢索結果時,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 

或者,如果你從Table1需要的所有列,你必須使用SELECT *可以使用:

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

參見:Why is 「Select * from table」 considered bad practice

+0

這就是我實際上試圖避免的,因爲我需要很多字段 – Fero

+0

@Fero68,我意識到這一點。但我沒有看到任何其他選擇。你想要什麼不能做AFAIK。 – kobik

相關問題