3

私は2つのテーブルを持っています:

エレメント:

ID (int. key)
TYPE (String)

ELEMENT_ATTRIBUTES:

ELEMENT_ID (int)
ATTR_NAME (String)

(この質問に必須ではない元のテーブルのフィールドを無視しています)

私は次のようなことをしたいと思います:

UPDATE ELEMENT e, ELEMENT_ATTRIBUTES a
SET a.ATTR_NAME='new name'
WHERE e.ID = a.ELEMENT_ID
  AND e.TYPE = 'a specific type'
  AND a.ATTR_NAME = 'old name'

これはderbysqlで可能ですか?

4

2 に答える 2

5

UPDATEステートメントのDerbyリファレンスマニュアルを見ると、構文は次のとおりです。

{
    UPDATE table-Name [[AS] correlation-Name]
        SET column-Name = Value
        [ , column-Name = Value} ]*
        [WHERE clause] |
    UPDATE table-Name
        SET column-Name = Value
        [ , column-Name = Value ]*
        WHERE CURRENT OF
}

いいえ、質問のようにクエリを実行することはできません。次のように少し変更する必要があります。

UPDATE ELEMENT_ATTRIBUTES a
SET a.ATTR_NAME='new name'
WHERE a.ATTR_NAME = 'old name'
AND EXISTS (SELECT 1 
            FROM ELEMENT e 
            WHERE a.ELEMENT_ID = e.ID AND e.TYPE = 'a specific type')
于 2012-12-07T14:46:04.990 に答える
2

記録のために:私はそれをしました。select句は、更新する行ごとに1つの結果のみを返す必要があるため、次のようになります。

UPDATE MY_TABLE1 A SET 
    A.FIELD1 = (SELECT b.FIELD2 
                FROM MY_OTHERTABLE B 
                WHERE (A.FIELD3= B.FIELD3) AND (A.FIELD4= B.FIELD4));
于 2021-11-03T13:41:37.690 に答える