insert select

216 views
Skip to first unread message

Denis Latypoff

unread,
Feb 9, 2017, 10:32:12 AM2/9/17
to ClickHouse
Здравствуйте, столкнулся с неочевидным поведением при insert select:

Использую ReplicatedReplacingMergeTree:

insert into table1
select 1 as field1, field2, ... from table1
where field1 = 0

Ожидалось, что будут вставлены найденные строки, у которых field1 = 0, но при вставке field1 будет заменен на 1.
Не работает. Или не должно работать? Такое ощущение, что where берет данные не из источника, а в секции select.

Pavel Artemkin

unread,
Feb 10, 2017, 4:00:49 AM2/10/17
to ClickHouse
Мне кажется, что у вас ошибка в запросе.
Select 1 as field1 - константа для всех строк. В таком случае, where field1 = 0 - всегда false.

Denis Latypoff

unread,
Feb 10, 2017, 5:37:54 AM2/10/17
to ClickHouse


пятница, 10 февраля 2017 г., 15:00:49 UTC+6 пользователь Pavel Artemkin написал:
Мне кажется, что у вас ошибка в запросе.
Select 1 as field1 - константа для всех строк. В таком случае, where field1 = 0 - всегда false.

В MySQL, я бы просто написал insert into table select 1, field2, field3 from table where field1 = 0.
Кликхаус не дает так делать. 

Vadim Sichkarev

unread,
Feb 13, 2017, 5:23:25 AM2/13/17
to ClickHouse
Кликхаус дает так делать, только нужно фильтрацию обернуть в подзапрос. Для примера:

select 3 as field1, field2 from (
    select * from (
        select 'aaa' as field1, 'bbb' as field2
        union all
        select 'ccc', 'ddd' 
    ) where field1 = 'aaa'
)



пятница, 10 февраля 2017 г., 15:37:54 UTC+5 пользователь Denis Latypoff написал:

Denis Latypoff

unread,
Feb 16, 2017, 4:23:14 AM2/16/17
to ClickHouse
Да, действительно, с подзапросом норм, но не покидает ощущение, что выполняется двойная работа.

понедельник, 13 февраля 2017 г., 16:23:25 UTC+6 пользователь Vadim Sichkarev написал:
Reply all
Reply to author
Forward
0 new messages