更新值,如果在不同的表中的列匹配
问题描述:
我有以下两个表:更新值,如果在不同的表中的列匹配
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实际使用的自定义属性(另一个表存储由所有程序共享的属性)。
现在,如果我想修改一个对象的自定义属性,我知道Key
和Value
我想修改它。但是,我首先需要将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
clause,nor 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');