복붙노트

[SQL] MySQL의 동적 열 이름을 선택하는 방법

SQL

MySQL의 동적 열 이름을 선택하는 방법

나는 열 이름을 선택합니다 그러나 나는 시간의 테이블 구조 앞서 몰라하고 열 이름을 가진 그래서 내가 할 수있는 단지 하드 코드 select 문을 변경할 수 있습니다. 나는 또한 모든 열을 선택하고 싶지 않아요. 이 작업을 수행하는 쉬운 방법은 거기 있습니까?

내 생각은이 두 쿼리의 조합의 일종이다하지만 내 SQL가 좋지 않다 있습니다.

SHOW COLUMNS FROM table_name;
SELECT * FROM table_name; 

나는 서브를 선택하여 시도했지만 작동하지 않았다. 아무것도 일어날 것 같다, 난 그냥 아무 결과를 얻을 수없는 오류가 발생하지 않습니다

SELECT (SELECT column_name 
        FROM information_schema.columns 
        WHERE table_name ='table_name') 
FROM table_name;

어쩌면 내가 가입 할 필요가? .. 어쨌든 어떤 도움도 큰 감사 것

해결법

  1. ==============================

    1.이 SQLFiddle을보십시오 :

    이 SQLFiddle을보십시오 :

    CREATE TABLE atable (
      prefix1 VARCHAR(10)
      ,prefix2 VARCHAR(10)
      ,notprefix3 INT
      ,notprefix4 INT
    );
    
    INSERT INTO atable VALUES ('qwer qwer', 'qwerqwer', 1, 1);
    INSERT INTO atable VALUES ('qwer qwer', 'asdfaasd', 1, 1);
    INSERT INTO atable VALUES ('qwer qwer', 'qrt vbb', 1, 1);
    INSERT INTO atable VALUES ('qwer qwer', 'sdfg sdg', 1, 1);
    
    SELECT CONCAT('SELECT ', GROUP_CONCAT(c.COLUMN_NAME), ' FROM atable;')
    INTO @query
    FROM INFORMATION_SCHEMA.COLUMNS c
    WHERE c.TABLE_NAME = 'atable'
      AND c.COLUMN_NAME LIKE 'prefix%'
    ORDER BY c.ORDINAL_POSITION;
    
    PREPARE stmt FROM @query;
    
    EXECUTE stmt;
    

    일부 문제 :

    당신은 가능성이 결과 집합에 ORDER BY의 어떤 종류를 원할 것입니다.

    당신이 조인과 사물의 측면에서 할 수있는 일에는 한계가있다.

    이 테스트에서 놓칠 수 가능성이 어디에 당신은 런타임 유효성 검사를 이동합니다.

    당신은 쉽게 스키마 변경을 처리 할 수 ​​바라고있다. 이 기술은 당신이 예상 할 수있는 특정 유형의 스키마 변경을 처리합니다, 당신은 아마있을 것이다 다른 사람은 어쨌든이 코드를 변경할 수 있습니다.

  2. from https://stackoverflow.com/questions/15507683/how-to-select-column-names-dynamically-in-mysql by cc-by-sa and MIT license