sql >> データベース >  >> RDS >> Sqlserver

SQL:2 番目のテーブルに基づいて、複数の行の列の一部を置き換えます

    CTE を利用する単一ステートメントの非カーソル メソッドを次に示します。

    WITH CTE(iteration, page_id, content) AS (
        SELECT
            0,
            P.page_id,
            REPLACE(P.content, M1.old_value, M1.new_value)
        FROM
            Pages P
        INNER JOIN Moving M1 ON
            P.content LIKE '%' + M1.old_value + '%'
        WHERE
            NOT EXISTS (SELECT * FROM Moving M2 WHERE P.content LIKE '%' + M2.old_value + '%' AND M2.moving_id < M1.moving_id)
        UNION ALL
        SELECT
            CTE.iteration + 1,
            CTE.page_id,
            REPLACE(CTE.content, M3.old_value, M3.new_value)
        FROM
            CTE
        INNER JOIN Moving M3 ON
            CTE.content LIKE '%' + M3.old_value + '%'
        WHERE
            NOT EXISTS (SELECT * FROM Moving M4 WHERE CTE.content LIKE '%' + M4.old_value + '%' AND M4.moving_id < M3.moving_id)
    )
    UPDATE P2
    SET
        content = CTE1.content
    FROM
        Pages P2
    INNER JOIN CTE CTE1 ON
        CTE1.page_id = P2.page_id AND
        NOT EXISTS (SELECT * FROM CTE CTE2 WHERE page_id = P2.page_id AND CTE2.iteration > CTE1.iteration)
      

    1. MYSQL5.1での@DECLAREの使用

    2. SSIS の問題 保護された XML ノードの復号化に失敗しました

    3. UPDATEがSELECTよりもはるかに長いのはなぜですか?

    4. ソフトウェア開発の役割の構造:データサイエンティスト