0

私はこのSQLステートメントを持っています:

    SELECT 
     t0.col0,
     t0.col1,
     t2.col0,
     t2.col1,
     t1.col0,
     t1.col1,
     t3.col3,
     t3.col5,
     t1.col2
    FROM table0 t0
    INNER JOIN table1 t1 ON t0.col0 = t1.col1
    INNER JOIN table2 t2 ON t2.col0 = t1.col0
    INNER JOIN table3 t3 ON t1.col0 = t3.col1
    WHERE t1.col1 in (300, 301, 302, 302)
    AND t2.col5 like 'V-%'
    AND t3.delete = 'false'

これは完全に機能しており、列が結合された仮想テーブルを示しています。だから私はこのようにこのテーブルを直接更新しようとします:

UPDATE T SET  T.col1 = 1, T.col2 = '01.01.2012'
FROM (
    SELECT 
     t0.col0,
     t0.col1,
     t2.col0,
     t2.col1,
     t1.col0,
     t1.col1,
     t3.col3,
     t3.col5,
     t1.col2
    FROM table0 t0
    INNER JOIN table1 t1 ON t0.col0 = t1.col1
    INNER JOIN table2 t2 ON t2.col0 = t1.col0
    INNER JOIN table3 t3 ON t1.col0 = t3.col1
    WHERE t1.col1 in (300, 301, 302, 302)
    AND t2.col5 like 'V-%'
    AND t3.delete = 'false'
) as T

成功せずに...それを作成する唯一の方法は、ビューを作成して更新を続行することでした。

しかし、1つのステートメントで仮想テーブルを更新できますか?

4

1 に答える 1

0

テーブルを更新しようとしているのではなく、selectステートメントの出力を更新しようとしています。出力がどこにも行かないため、これは仮想テーブルではありません。

このようなものが必要だと思います。

UPDATE T SET  t0.col0 = 1, t0.col1 = '01.01.2012'
    FROM table0 t0
    INNER JOIN table1 t1 ON t0.col0 = t1.col1
    INNER JOIN table2 t2 ON t2.col0 = t1.col0
    INNER JOIN table3 t3 ON t1.col0 = t3.col1
    WHERE t1.col1 in (300, 301, 302, 302)
    AND t2.col5 like 'V-%'
    AND t3.delete = 'false'
于 2012-10-04T08:09:15.453 に答える