2010-07-29 5 views
14

가변 개수의 열이있는 두 개의 테이블이 있습니다. 예를 표 A에 대해 (내가 거기 이름은 얼마나 많은 열 또는 모르는)와SQL 내부에서 동일한 열 이름을 가진 두 테이블을 결합하십시오.

TableA의 표 B. :

ID | B_ID | {variable} 

TableB의

ID | {variable} 

검색어 :

SELECT TableA.*, TableB.* FROM TableA INNER JOIN TableB ON TableA.B_ID= TableB.id; 

TableA와 TableB 모두에 동일한 이름의 열이있는 경우 두 개의 서로 다른 열을 구분할 수 없습니다. 내가 무엇을 찾고 있어요 것은 두 테이블을 구별 할 수있는 방법입니다

ID | ID | B_ID | NAME | NAME | 
1 | 35 | 35 | bob | jim | 

:에 두 테이블의 예를 들어 열 "이름"이이 쿼리가 발생할 것입니다. 가급적 열 이름과 같은 prefex를 사용하십시오.

TableA_ID | TableB_ID | TableA_B_ID | TableA_NAME | TableB_NAME | 
     1 |  35 |   35 |   bob |   jim | 

"AS"키워드는 알고 있지만 문제는 이전에 열 이름이 무엇인지 알 수 없다는 것입니다.

그래서 내 질문은 당신이 테이블이있을 수 있습니다 때 조인 INNER와 두 테이블 사이의 열을 구별하려면 어떻게

입니다 (TableA의 또는 TableB의 컬럼 이름을 위하여려고하는 경우 나도 몰라) 같은 열 이름?

SQLite3을 사용하고 있습니다.

답변

13

귀하의 결과 집합 (귀하의 쿼리가 주어진) 모든 TableB 열 뒤에는 모든 TableB 열이 있어야하므로 두 번째 ID 열로 가면 TableB 데이터에 있음을 알 수 있습니다. 말했다

, 그것은 당신이 어떤에 대해 당신이 인정 하듯이 해킹 솔루션입니다 기능적으로 아무것도 ...

+1

사용자가 런타임에 생성 한 테이블을 쿼리 할 수있는 일종의 펑키 한 동적 SQL과 유사합니다. – FrustratedWithFormsDesigner

+3

열 이름을 모르는 경우 디자인에 심각한 문제가 있음을 양해 해 주시기 바랍니다. Select 문은 select *를 사용하지 않아야합니다. 특히 동일한 열이 두 번 반환되는 조인에서 열 이름을 지정해야합니다. 이는 서버 리소스를 낭비합니다. – HLGEM

+0

테이블이 생성되고 있다면, 그 테이블은 캡쳐 할 수있는 컬럼 이름을 가지고 있습니다 ... – AllenG

6

몰라 두 테이블에서 모든 데이터를 조회하고 나에게 이상한 것 같다,하지만이 :

SELECT TableA.*, "#", TableB.* 
FROM TableA INNER JOIN TableB ON TableA.B_ID= TableB.id; 

# 열의 왼쪽과 오른쪽 두 블록으로 나뉘어 질 결과 목록을 작성합니다.

관련 문제