Обновление SQL из Select: методы и примеры

«ОБНОВЛЕНИЕ SQL из SELECT» — это распространенная операция в SQL, которая позволяет обновлять записи в одной таблице на основе значений из другой таблицы. Вот несколько способов добиться этого, а также примеры кода:

  1. Использование подзапроса:

    UPDATE table1
    SET column1 = (
    SELECT column2
    FROM table2
    WHERE table1.id = table2.id
    )
    WHERE EXISTS (
    SELECT *
    FROM table2
    WHERE table1.id = table2.id
    );

    В этом примере обновляется column1в table1соответствующими значениями из column2в table2на основе соответствующего id.

  2. Использование INNER JOIN:

    UPDATE table1
    INNER JOIN table2 ON table1.id = table2.id
    SET table1.column1 = table2.column2;

    В этом примере INNER JOINиспользуется для сопоставления записей в обеих таблицах на основе столбца id, а затем выполняется обновление.

  3. Использование коррелированного подзапроса:

    UPDATE table1
    SET column1 = (
    SELECT MAX(column2)
    FROM table2
    WHERE table2.id = table1.id
    );

    В этом примере обновляется column1в table1максимальным значением из column2в table2для соответствующего >id.

  4. Использование временной таблицы:

    CREATE TEMPORARY TABLE temp_table AS (
    SELECT column1, column2
    FROM table1
    JOIN table2 ON table1.id = table2.id
    );
    UPDATE table1
    SET table1.column1 = temp_table.column2
    FROM temp_table
    WHERE table1.id = temp_table.id;

    Здесь создается временная таблица для хранения значений объединения table1и table2, а затем на основе временной таблицы выполняется обновление.

  5. Использование CTE (общее табличное выражение):

    WITH cte AS (
    SELECT column1, column2
    FROM table1
    JOIN table2 ON table1.id = table2.id
    )
    UPDATE table1
    SET table1.column1 = cte.column2
    FROM cte
    WHERE table1.id = cte.id;

    В этом примере CTE используется для объединения строк из table1и table2, а затем обновление выполняется на основе CTE.