2016-09-20 63 views
1

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

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

回答

2

如何:

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