Derby db:sql更新select语句的结果

Ald*_*ldo 3 sql derby sql-update

我有两张桌子:

元素:

ID (int. key)
TYPE (String)
Run Code Online (Sandbox Code Playgroud)

元素属性:

ELEMENT_ID (int)
ATTR_NAME (String)
Run Code Online (Sandbox Code Playgroud)

(我忽略了原始表中的字段,这些字段对于这个问题来说并不重要)

我想做这样的事情:

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'
Run Code Online (Sandbox Code Playgroud)

这在 derby sql 中可能吗?

Mar*_*eel 5

查看Derby 参考手册中关于 UPDATE 语句的语法是:

{
    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
}
Run Code Online (Sandbox Code Playgroud)

所以不,您不能像您的问题一样执行查询。您需要将其修改为:

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')
Run Code Online (Sandbox Code Playgroud)