Wypróbuj ten 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;
Niektóre problemy:
Prawdopodobnie będziesz potrzebować pewnego rodzaju ORDER BY w swoim zestawie wyników.
Istnieje limit tego, co możesz zrobić, jeśli chodzi o łączenia i inne rzeczy.
Przenosisz walidację do środowiska wykonawczego, gdzie jest bardziej prawdopodobne, że zostanie pominięta podczas testowania.
Masz nadzieję, że będziesz w stanie łatwo obsługiwać zmiany schematu. Ta technika poradzi sobie tylko ze zmianami schematu określonego typu, który możesz przewidzieć, a inne prawdopodobnie i tak będziesz musiał zmienić ten kod.