2014-08-29 1 views
0

Предположим, у меня есть 3 столбца на выбор: colA, colB и colC.Как условно ВЫБЕРИТЬ несколько столбцов с помощью MySQL?

У нас есть 7 возможностей для выбора из:

single column: colA | colB | colC 
double column: colA colB | colA colC | colB colC 
triple column: colA colB colC 

Я хотел бы сделать запрос, который позволяет мне выбрать, какие столбцы я хочу выбрать. Например, если я хочу, чтобы выбрать столбцы colB и colC, то SELECT, должен вернуть

colB colC 
--------- 
1 4 
2 5 
3 6 
--------- 

я уже искал в течение некоторого времени, и то, что я сталкиваюсь большинство являются CASE и IFControl Flow Functions, но я не мог достичь того, что описывается с ними. Например, если я делаю следующий запрос, столбцы, которые не активированные отображаться с NULL значениями (в то время как они не должны отображаться):

SET @colB_switch := 1; 
SET @colC_switch := 0; 

SELECT 
    CASE WHEN @colB_switch = 1 THEN colB END, 
    CASE WHEN @colC_switch = 1 THEN colC END 
FROM my_table 

Для этого простого случая, я мог бы просто жесткий код каждая возможность, но когда у нас есть десятки столбцов, у нас есть буквально тысячи возможностей!

PS: другой подход будет выбирать, какие столбцы для не показать, может быть, это проще?

+0

вы можете посмотреть http://dev.mysql.com/doc/refman/5.1/de/if-statement.html – Dwza

+1

SQL-запрос имеет фиксированный набор столбцов. Если вы хотите переменный набор столбцов, вам нужно использовать оператор 'prepare' (также известный как динамический SQL). –

+0

@GordonLinoff Я проверю это, спасибо! – feelthhis

ответ

2

После @GordonLinoff suggestion, вот один из способов условно выбрать несколько столбцов с MySQL:

SET @colA := NULL; 
SET @colB := 'colB'; 
SET @colC := 'colC'; 

SET @stat := CONCAT('SELECT ', CONCAT_WS(',', @colA, @colB, @colC), ' FROM my_table'); 

PREPARE stmt1 FROM @stat; 
EXECUTE stmt1; 

CONCAT_WS() удобно, потому что если я не хочу, чтобы выбрать данную колонку, я просто установить его на NULL (COLA , в примере).

+0

Хорошее решение. Мне это нравится. –

+0

@estshy Я рад, что вам понравилось! :) – feelthhis

Смежные вопросы