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

问题描述:

我有以下两个表:更新值,如果在不同的表中的列匹配

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

如何:

UPDATE XXXCustom 
SET value='myval' 
WHERE licID=(SELECT id FROM CustomProperties WHERE key='mykey');