Создание таблиц SQL со столбцами, производными от другой таблицы, является распространенной задачей при управлении базами данных. В этой статье рассматривается несколько методов эффективного выполнения этой задачи и приводятся примеры кода для каждого подхода. Независимо от того, являетесь ли вы новичком или опытным разработчиком, эти методы помогут вам оптимизировать рабочий процесс SQL и сэкономить время. Давайте погрузимся!
Метод 1: использование оператора CREATE TABLE AS SELECT
Пример кода:
CREATE TABLE new_table AS
SELECT column1, column2, column3
FROM existing_table;
Метод 2: использование оператора CREATE TABLE с определениями столбцов
Пример кода:
CREATE TABLE new_table (
column1 datatype,
column2 datatype,
column3 datatype
);
Метод 3: использование оператора CREATE TABLE с предложением SELECT INTO
Пример кода:
SELECT column1, column2, column3
INTO new_table
FROM existing_table;
Метод 4. Создание временной таблицы и изменение ее структуры
Пример кода:
CREATE TEMPORARY TABLE temp_table AS
SELECT column1, column2, column3
FROM existing_table;
ALTER TABLE temp_table
RENAME TO new_table;
Метод 5: клонирование структуры существующей таблицы с помощью предложения LIKE
Пример кода:
CREATE TABLE new_table LIKE existing_table;
Метод 6: использование представления information_schema.columns
Пример кода:
CREATE TABLE new_table AS
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'existing_table';
Метод 7. Использование хранимой процедуры или языка сценариев
Пример кода (хранимая процедура MySQL):
DELIMITER //
CREATE PROCEDURE create_table_from_existing()
BEGIN
DECLARE column_name VARCHAR(255);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'existing_table';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
CREATE TABLE new_table (
id INT AUTO_INCREMENT PRIMARY KEY
);
OPEN cur;
read_loop: LOOP
FETCH cur INTO column_name;
IF done THEN
LEAVE read_loop;
END IF;
SET @sql = CONCAT('ALTER TABLE new_table ADD COLUMN ', column_name, ' datatype;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
CALL create_table_from_existing();