2011-04-07 3 views

답변

3

아니요. * column wildcard을 사용하여 모든 열을 선택할 수 있습니다.

SELECT a.id, a.title, b.* 
    FROM articles AS a 
    JOIN blurbs AS b ON a.id = b.article 

그러나 당신은 DB 관리 프로그램을 작성하지 않는 한, 당신은 *을 사용하지 않아야합니다 : 여러 테이블을 조인하는 경우 테이블 이름 또는 별칭으로 * 접두사를 지정하여 특정 테이블의 모든 열을 선택할 수 있습니다 .

또는 테이블 메타 데이터를 가져 와서 열 이름을 가져 와서 SQL 또는 다른 언어로 명령문을 작성할 수 있습니다. MySQL만을 사용하면 INFORMATION_SCHEMA 데이터베이스의 COLUMNS 테이블을 쿼리하여 열 이름을 가져오고 GROUP_CONCAT을 사용하여 문에 대한 열 목록을 작성할 수 있습니다.

SELECT CONCAT(
     'SELECT ', 
     GROUP_CONCAT(COLUMN_NAME SEPARATOR ', '), 
     ' FROM ', :db, '.', :table, 
     ' WHERE ...' 
    ) 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_SCHEMA=:db AND TABLE_NAME=:table 

": db", ": table"및 "..."을 적절한 값으로 바꿉니다. 준비된 명령문으로 변환하여 모든 테이블에 사용할 수 있습니다. 거기에서 PREPAREEXECUTE 작성된 명령문.

프로그래밍을 위해 SQL에 국한되지 않으면 덜 복잡해야합니다. 선택한 언어의 DB 드라이버는 메타 데이터를 가져 오는 방법을 제공 할 가능성이 큽니다. 실제 구현은 순수 SQL 접근법 (열 이름 가져 오기, 구문 작성, 준비, 실행)과 유사하지만 선언적 언어가 아닌 알고리즘을 사용하는 것처럼 그렇게 추악하지 않아야합니다.

나는이 실제로 필요하다는 상황을보고 매우 관심을 가질만한

..

+0

정규화 된 테이블 집합으로 클래스 계층을 구현하면 기본 클래스 테이블에 조인 d 인 여러 테이블이 있습니다. 검색하려는 인스턴스의 유형을 알고 있으면 읽을 테이블을 알 수 있습니다. 따라서 파라 메트릭 테이블 이름이 필요합니다. 필자가 착각하지 않는다면, 최대 절전 모드는이 경우 관련된 모든 테이블에 대해 유니온 쿼리를 수행하고 이에 따라 결과를 처리한다. – Dan

+0

SHOW COLUMNS FROM table_name where '% type %'와 같은 필드 - 하위 쿼리에서 사용되지만 추가 열 유형, null, 키, 기본값, 추가 항목 등을 표시하는 데 유용 할 수 있습니다. 단지 쉼표로 구분 된 열 이름을 원합니다. . 솔루션 검색 중 ... – Mark

+0

1. 쿼리 을 사용하여 필수 열 이름 가져 오기 2. 1 번 결과를 사용하고 select 쿼리에서 사용 ... – Mark

0

확실히 가능한 프런트 엔드 언어를 사용하는 경우. PHP를 그냥 사용하는 경우

$fieldlist= "cola, colb "; 
$tablename="tabl"; 
"select $fieldlist from $table" 

내 직감은 당신이 PHP mysql을 사용하여 간단한 것을하고 있다고 말하고 있지만 틀릴 수도 있습니다.

1

information_schema를 사용하고 준비된 문을 사용하여 이름에 유형이 들어있는 모든 필드를 찾을 수 있습니다.

set @str = (concat('select ',(select concat(group_concat(column_name),' from ',table_name) 
from information_schema.columns 
where table_schema = 'your_db_name' and table_name = 'your_table_name' and column_name like '%type%'))); 
prepare stmt from @str; 
execute stmt; 
deallocate prepare stmt;