0

最近変更された部屋番号と一致するように、コンピューターのホスト名のコレクションを更新しようとしています。データベース内のホスト名は FL-itf2106a のような形式で、2106 が古い部屋番号です。同じ行に古い部屋番号と新しい部屋番号がある別のテーブルに既にリストがあります。ホスト名の文字列からすべての非数値を取り除き、それを更新テーブルに結合しようとしましたが、失敗しました。

    UPDATE computers c
INNER JOIN updates u 
        ON u.old = (
                    SELECT NumericOnly(c.hostname)
                     WHERE hostname 
                      LIKE "%FC%"
                   )
       SET c.hostname = CONCAT('classf', u.new);

NumericOnly は、文字列から数値以外のすべての文字を削除するユーザー関数です。

ホスト名の列をclassf +新しい部屋番号に等しく設定しようとしています。

4

2 に答える 2

0

私のために働いたPostgresqlのバージョン:

update table1 set columnZ = newValue from table1 t1
inner join table2 t2
on t1.columnX = t2.columnY
where table1.uniqueID = t1.uniqueID
and t2.filterColumn = filterValue

http://johnstewien.wordpress.com/2010/03/15/doing-a-join-in-an-update-in-sql-for-postgresql/

この質問は、Google の「SQL UPDATE JOIN」の最初の数ヒットで出てきます。

于 2014-03-09T22:19:26.817 に答える