2013-11-27 5 views
1

У меня есть следующий запрос MySQL:MySQL псевдоним на группу

insert into my_table (col_a, col_b) 
select 
    col_a, 
    col_b, 
    if(foo, bar, baz) as my_alias 
from qux 
group by my_alias 
having my_alias is not null 

Как я мог переписать запрос без select -ный сгенерированного поля my_alias?

Например, я пытаюсь добиться чего-то вроде этого, где я только вставить на col_a, col_b:

insert into my_table (col_a, col_b) 
select 
    col_a, 
    col_b 
from qux 
group by if(foo, bar, baz) as my_alias 
having my_alias is not null 

Я нашел некоторые предыдущие ответы, где это делается путем суб-выбора. Может ли это быть достигнуто без одного? Заранее спасибо.

ответ

1

The manual tells us:

MySQL допускает выражения в группе пунктов, так что псевдоним ненужные:

SELECT id, FLOOR(value/100) FROM tbl_name GROUP BY id, 
FLOOR(value/100); 

В HAVING отфильтровывает запись NULL в конце. Мы также можем использовать WHERE для фильтрации записей NULL на forehand. Это будет означать, что это должно сработать:

insert into my_table (col_a, col_b) 
select 
    col_a, 
    col_b 
from qux 
where if(foo, bar, baz) is not null 
group by if(foo, bar, baz) 
+0

Спасибо за вашу помощь, Ясный. Я пытаюсь использовать псевдоним, потому что реальный «if (foo, bar, baz)» «большой» и «уродливый». :) – Glenn

+0

Спасибо, что обратились ко мне в руководство. Думаю, это невозможно. – Glenn

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