2014-12-24 3 views
3
Greeting to all smart people around here !! 

나는 SQL에 관한 이상한 인터뷰 질문에 직면 해있다.데이터베이스의 여러 테이블에서 공통 열을 가져 오는 방법은 무엇입니까?

Qn.

예를 들어, location은 100 개의 테이블에서 공통 필드입니다. 내 SQL 쿼리에서 각 테이블 이름을 언급하지 않고 모든 테이블에서 location 필드를 가져 오려고합니다.

어떤 방법이 있습니까? 다음

모든 가능성을 알려면 ... DB 메타 데이터에서 테이블의

+1

하지 SQL에서 (하나 개 이상의 엔진에 최소 기준을 준수 할 것도, 작업을) [오라클]을 연구하지 할 수있는 링크입니다. 인터뷰에서 그러한 질문을하는 사람은 누구나 송어 (송어)로 때려 눕히고 데이터베이스 디자인에 대해 가르쳐야합니다. 트릭 질문이 아니라면, 그들은 당신이 송어로 그들을 때 리라고했습니다. – Amadan

+1

좋아요. 'IBM DataStage 도구'에서 동일한 조건이 작동한다면? –

+0

들어 본 적이 없습니다.질문이 데이터베이스와 관련된 것이라면, 지식이있는 사람들이 더 쉽게 알아 차릴 수 있도록 태그에 넣어야합니다. – Amadan

답변

0

내 친구가 발견 한 답 ..

여러 테이블에서 일반 열을 얻으려면, 사용 INFORMATION_SCHEMA.COLUMNS 및 공통 열 이름.

검색어 : select *from information_schema.columns where column_name='column name'

희망이 의지가 도움이!

+0

하지만이 정보는 특정 열에 대한 정보 만 제공합니다. ** 특정 열 **이 100 개의 모든 표에서 공통 열인지 여부는 어떻게 결정됩니까? 그 대답을 게시하고 받아 들여야한다고 생각하니? –

+0

아니, 제 질문에 분명히 언급했습니다. 다른 사람은 이것을 게시하지 않았을 것입니다. –

2

GET 목록 및 각각 조회 :

MSSQL 서버에서
Statement stmt = conn.createStatement(); 
ResultSet locationRs = null; 
DatabaseMetaData md = conn.getMetaData(); 
ResultSet rs = md.getTables(null, null, "%", null); 
while (rs.next()) { 
    locationRs = stmt.executeQuery("SELECT location from "+ rs.getString(3)); 
    System.out.println(locationRs.getString(1)); 
} 
0

당신이 포함되어 INFORMATION_SCHEMA.COLUMNS 테이블이 열 이름을 사용하여 그룹별로 사용할 수 있고 몇 가지 값을 계산하면 열 이름을 가져 와서 열 이름의 값을 가져 와서 계속 수행 할 수 있습니다. 당신은 ans을 얻을 것이다.

예 :

당신이

0

당신은 DB에있는 테이블의 수에 대해이 작업을 시도 할 수있는 일반적인 열 이름을 얻을 것이다 COLUMN_NAME BY INFORMATION_SCHEMA.COLUMNS 그룹 수를 가지고 위의 요청에 의한 (COLUMN_NAME)> 2

에서 선택 COLUMN_NAME 내 질문에 대한

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS group by COLUMN_NAME having count(COLUMN_NAME)=(select count(*) from INFORMATION_SCHEMA.TABLES) 
0

이미 연결 및 statemnt 개체가 있다고 가정합니다. 지금 아래를 시도하십시오; 루프와 조건을 조정하지 않으면 효과가있을 수 있습니다. 또한 예 : rs1 및 rs2라는 두 개의 ResultSet 객체가 필요합니다.


DatabaseMetaData dbmd = con.getMetaData();
문자열 테이블 [] = { "TABLE"}`;
rs1 = dbmd.getTable (null, null, ". *", table);

while(rs1.next()){ 
    String tableFrom = rs1.getString(3) ; 
    rs2 = dbmd.getColumns(null,null,tableFrom , ".*") ; 
    while(rs2.next()) { 

     String locColFrom = rs2.getString(3); 

     if(locColFrom .equalsIgnoreCase("location")) 
      stmt.executeQuery(select locColFrom from tableFrom) ; 
     } 
} 

여기에, 아니오 (http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String[]))

관련 문제