Я смотрю чужой код, и там около 200 строк, в которых они используют CREATE TABLE с SELECT STATEMENT, просто чтобы закончить утверждением WITH NO DATA
А непосредственно под ним используются те же запросы с оператором INSERT. Итоговая таблица содержит более 400 тыс. строк. Я просто хотел знать, почему это будет видно/если это лучшая практика? И если это не лучшая практика, то какой лучший способ сделать это?
Да, извини, я это имел в виду
Являются ли эти 200 строк просто 200-дюймовыми столбцами? Я создал такие таблицы: create table table1 as (select * from orig_table where 1=0);. Это создаст новую таблицу со всеми необходимыми столбцами. Строки заполняются позже по мере необходимости.


Это общий трюк — создать таблицу с шаблоном набора данных, созданного запросом. В этом случае таблица создается не только со столбцами и одинаковым типом данных для каждого столбца, но также со всеми ограничениями столбцов NOT NULL и CHECK, если таковые имеются, но без ограничений таблицы (PK, FK, unique.... ). Это позволяет избежать написания сложной команды CREATE TABLE и синхронизации структуры постоянных таблиц в базе данных с новой таблицей, созданной таким образом, которые часто представляют собой временные таблицы или таблицы «клинекс», такие как таблицы, используемые для разбивки данных... Не делайте этого. забудьте, что база данных не является фиксированной структурой, но может развиваться в любое время, особенно с помощью некоторого ALTER TABLE... (добавление столбцов или новых ограничений).
WITH NO DATA или WITH DATA не влияет на ограничения столбца или таблицы в Db2.
Вы имеете в виду ограничения таблицы... Не те столбцы, которые наследуют тип данных...
в твоем ответе говорится column constraints NOT NULL and CHECK if any
Вы не включаете код, но из вашего описания у вас есть:
create table mytable as (select <...>) WITH NO DATA;
insert into mytable (select <...>);
Где select <...> точно такие же.
В таком случае нет, это не лучшая практика и даже не хорошая идея, поскольку select <...> нужно оценивать дважды. Конечно, необходимое время, вероятно, тривиально по сравнению со временем, необходимым для загрузки таблицы.
Вы имеете в виду, что они создали таблицу, используя
CREATE TABLEна основе SELECT, и в их операторе былоWITH NO DATA? Они взяли структуру набора результатов для таблицы, но не заполнили ее.