仅当两个值在另一个表中匹配时才更新SQL语句

时间:2014-04-04 16:59:44

标签: sql sql-server

我一直在寻找我的桌面上遇到的这种情况,我一直在搜索参考网站,但没有幸运创建正确的SQL语句来完成此任务。

以下是该方案的PSEUDO代码。

UPDATE TABLE1
SET TABLE1.ID = TABLE1.From_ID,
    TABLE1.VALUE = 'ALL'
WHERE TABLE1.From_ID = TABLE2.ID
  AND TABLE2.NAME = 'TEST'

基本上我只需要更新TABLE1中的两列,如果TABLE1中的id与TABLE2中的ID匹配,而TABLE2中的description列等于字符串值,则警告TABL1列只有在有的情况下才能更改TABLE1和TABLE2以及TABLE2中的ID之间的相关性,ID与特定字符串值的描述列相关。下面是表格结构和最终结果我也试图得到。

TABLE1

FIELD_ID    CONDITIONAL_VALUE   FROM_FIELDID
--------------------------------------------   
   1        TEST                   3
   7        TEST                   4
   5        ANY                    7

TABLE2

FIELD_ID   Description
----------------------------------------------
   3       BLUE
   4       BLUE
   7       RED

2 个答案:

答案 0 :(得分:2)

您需要将数据从TABLE1加入TABLE2

UPDATE t1
    SET t1.ID = t1.From_ID
       ,t1.VALUE = 'ALL'
    FROM Table1 AS t1
    JOIN table2 AS t2
        ON t1.From_ID = t2.ID
           AND t2.NAME = 'TEST't1

答案 1 :(得分:1)

在Transact-SQL(SQL Server的SQL方言)中,如果指定的内容超过了要更新的表,则SQL中需要FROM子句。

update TABLE1.ID set TABLE1.ID = TABLE1.From_ID , TABLE1.VALUE = 'ALL' from TABLE1, TABLE2 where TABLE1.From_ID = TABLE2.ID AND TABLE2.NAME = ''TEST