2011-03-25 4 views
0

사용자가 데이터베이스에 데이터를 가져 오기 위해 SQL 쿼리를 입력 할 수있는 유틸리티를 만들고 있습니다.주어진 mysql 쿼리의 열 이름을 어떻게 얻을 수 있습니까?

첫 번째 단계는 결과 필드 목록을 표시하여 사용자가 대상 필드로 라우팅 할 수 있도록하는 것입니다.

사용자가 MSSQL에서 가져올 때 SET FMTONLY ON을 사용하면 실행 된 경우 쿼리가 생성하는 출력 열 목록을 가져올 수 있습니다 (쿼리가 처음부터 유효하다고 가정 할 경우).

MySQL에서이 작업을 수행 할 수있는 방법을 찾을 수 없었습니다. EXPLAIN은 결과 필드를 나열하지 않습니다.


는 다음 쿼리를 감안할 때 :

SELECT CONCATENATE(first_name, " ", last_name) AS name, age, foo 
FROM customers 
ORDER BY name ASC; 
내가 궁극적으로 같은에만 출력 필드의 목록을 얻을 필요가

:

{ "name", "age", "foo" } 

가 어떻게 MySQL의에서이 작업을 수행 할 수 있습니다?

+0

SQL Server 방법 : http://stackoverflow.com/questions/3777046/how-to-list-all-columns-of-a-given-sql-query/3777086#3777086 – JYelton

답변

3

SET FMTONLY ON 여전히 수동으로 열 이름과 유형을받을 것을 요구 DESC {테이블 _} 찾고 생각합니다.

MySQL을 들어

, 어딘가

SELECT CONCATENATE(first_name, " ", last_name) AS name, age, foo 
FROM customers 
WHERE FALSE 
ORDER BY name ASC; 

당신은이 아름다운 실행 계획을 얻을 WHERE 거짓을 추가

"ID"; "SELECT_TYPE"; "테이블", "유형"; "이 possible_keys" ; "key"; "key_len"; "ref"; "rows"; "추가"
"1"; "단순", NULL, NULL, NULL, NULL, NULL, NULL, NULL; "불가능 WHERE"당신은 (제한 에드에 의해 중첩 된 그룹) 복잡한 쿼리의 경우 MSSQL과 set fmtonly on


를하는 것처럼

그런 다음 열을 구문 분석, 하위 쿼리에 포장

select * from (
    <your wonderful brilliant complex query> 
) x where false 

내부 쿼리에 TOP이없는 ORDER BY가 포함되어 있으면 MSSQL에서 불만을 제기 할 수 있습니다.

+0

+1 이것은 간단하지만 훌륭합니다. 한 가지 문제가 있습니다 : 이미 WHERE FALSE를 여러 개의 WHERE 절이있을 수도있는 쿼리 문자열에 추가하고 ORDER 또는 GROUP 지시문으로 끝낼 수는 있습니다. 영리한 문자열 파싱을 통해 가능합니다. – JYelton

+0

@JYelton - 좋은 지적, 대답이 업데이트되었습니다.물론 쿼리가 종결 자';'로 끝나면 하위 쿼리에서 먼저 제거하십시오! – RichardTheKiwi

+0

우수합니다. – JYelton

0

난 당신이 그냥 빈 결과 집합을 생성

+0

이것은 단순히 사용자가 테이블을 선택하고 해당 필드를 대상 데이터베이스로 라우팅하려고했습니다. 이미 테이블 조인, 필드 이름 바꾸기 또는 필드 생략을 수행 할 수있는 쿼리를 평가하는 방법을 찾고 있습니다. – JYelton

1

나는 당신이 resultsetmetada를 볼 필요가 있다고 생각한다. 나는 컬럼 수, 컬럼 이름 및 결과 세트에 대한 몇 가지를 가지고있다.

+0

쿼리를 확실히 실행하면 열이 표시됩니다. 쿼리가 오랜 시간이 걸릴 경우이 문제를 피할 수있는 방법이 필요했습니다. – JYelton

+0

@JYelton 쿼리를 실행할 필요없이 그냥 준비하십시오. – Neil

관련 문제