2016-11-01 2 views
2

두 테이블을 조인하는 select가 있습니다. 따라서이 테이블과 비슷한 이름의 열이 있으므로 결과를 검색 할 때 FireDac이 밑줄 1을 추가합니다. 비슷한 이름을 가진 필드에서 레코드를 얻는 경우 2 열 이름은 ... 내가 이렇게해야 2FireDac이 밑줄을 붙이면 같은 이름의 두 열 이름을 구분합니다.

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

구별하는

Dataset.FieldByName('Name').asInteger 
Dataset.FieldByName('Name_1').asInteger 
나는에 대한 설정이 있는지 알고 싶습니다

_1을 다른 것으로 변경하십시오. 변경하려는 이유는 다음과 같습니다. 우리는 단지 1을 추가 한 Interbase를 사용했습니다.

답변

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

관련 문제