如果不同表中的列匹配,则更新值

时间:2016-09-20 20:00:54

标签: sql sqlite

我有以下两个表:

CREATE TABLE CustomProperties (
      ID         INTEGER PRIMARY KEY
    , programID  INTEGER
    , Key        VARCHAR
)

CREATE TABLE XXXCustom (
      licID  INTEGER
    , propID INTEGER -- points to CustomProperties.ID
    , Value  VARCHAR
)

CustomProperties用作我的程序可以包含的不同类型的自定义属性的寄存器。 XXXCustom存储程序XXX实际使用的自定义属性(另一个表存储所有程序共享的属性)。

现在,如果我想修改对象的自定义属性,我知道要将其修改为KeyValue。但是,我首先需要将Key“转换”为相关的ID,然后我将其用于在XXXCustom中找到所需的行。

我试过

UPDATE XXXCustom
SET pp.Value = 'TEST'
FROM CustomProperties cp INNER JOIN XXXCustom pp
ON pp.propID = cp.ID AND pp.Key = 'test'

但这会引发语法错误,可能是因为UPDATE doesn't have a FROM clausenor can you use JOIN directly in an UPDATE。很公平。

所以我试过

UPDATE (SELECT cp.Key, pp.Value
        FROM CustomProperties cp INNER JOIN FtoolCustom pp
        WHERE cp.ID = pp.propID)
SET pp.Value = 'TEST'
ON pp.Key = 'test'

但是这也会引发语法错误,我相信因为UPDATE不适用于子查询,而是requires a qualified table name

所以现在我没有想法。我是否必须逐步手动执行此操作:首先将Key“转换”为其ID,然后使用该ID更新XXXCustom

1 个答案:

答案 0 :(得分:2)

怎么样:

xmlns:xsl="http://www.w3.org/TR/WD-xsl"