【问题标题】:Derby db: sql update the results of a select statementDerby db:sql 更新 select 语句的结果
【发布时间】:2012-11-25 14:20:24
【问题描述】:

我有两张桌子:

元素:

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'

这在 derby sql 中可行吗?

【问题讨论】:

    标签: sql sql-update derby


    【解决方案1】:

    the Derby Reference Manual on the UPDATE statement的语法是:

    {
        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')
    

    【讨论】:

      【解决方案2】:

      记录: 我做到了。 select 子句必须每行只返回一个要更新的结果,所以:

      UPDATE MY_TABLE1 A SET 
          A.FIELD1 = (SELECT b.FIELD2 
                      FROM MY_OTHERTABLE B 
                      WHERE (A.FIELD3= B.FIELD3) AND (A.FIELD4= B.FIELD4));
      

      【讨论】:

      • 您好 Jose,感谢您的贡献!关于这个答案,我想指出几点:首先,更新语句将更新 MY_TABLE1 中的每一行而不是特定记录,这就是问题所在。其次,这个问题是很久以前提出的,并且已经有了很好的答案。请查看一些最近的问题,并继续贡献! :-)
      猜你喜欢
      • 2010-11-03
      • 2023-02-08
      • 1970-01-01
      • 2013-06-18
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多