Insert into select удаляет ли данные во вставляемую таблицу?
например есть запрос:
insert into table_input select * from table_output
я так понял данный запрос вставляет данные из таблцы table_output в таблицу table_input.
Вопрос, а если данные в table_input уже имеются, то бд перезапишет абсолютно все данные или просто добавит новые?
к примеру table_input была запись с description = "hello world"
а в таблице table_output description = "hello world 2"
в итоге в table_input будет 2 записи или 1?
Автор как всегда не указал тип DBMS который на самом деле используется. Дело в том что оператор UPSERT (update + insert) имеет разные реализации в разных коммерческих системах. По синтаксису разные. Поэтому обсуждать в обобщенном SQL это безсмысленно. Но если-бы это был Oracle то я-бы предложил использовать MERGE https://docs.oracle.com/database/121/SQLRF/stateme... а для Postgres там другая форма синтаксиса.
Отвечая на вопрос перепишет или добавит - зависит от опции ON CONFLICT или ON MATCHED и от функций которы будут указаны в кейсах.
если данные в table_input уже имеются, то бд перезапишет абсолютно все данные или просто добавит новые?
В том виде как написано - просто добавит новые. И как для любого инсерт может упасть с ошибкой, если добавляемые данные нарушают целостность (условия констрейнтов). Хоть в MySQL, хоть в PostgreSQL, хоть в Oracle. А ignore, on conflict, on duplicate - это уже будет другой запрос.