【问题标题】:What is the SQL syntax for joining two tables, comparing and updating?连接两个表、比较和更新的 SQL 语法是什么?
【发布时间】:2015-04-06 21:00:13
【问题描述】:

我正在尝试根据来自另一个表的信息更新一个表中的单个列,但前提是它们已经不相同。下面代码的开头部分(直到大小写为止)是我目前所拥有的,但我似乎无法在更新之前获得正确的语法来进行比较。

UPDATE table1
SET table.column1 = table2.column2
 FROM table1
inner join table2 ON
    table1.KEY = table2.KEY
    WHERE column4 = something and DATE between '10/12/14' and '10/15/14'
 CASE 
    WHEN table1.column1 != table2.column2
end;

我使用的是 SQL server 2008r2,但任何与 SQL 兼容的代码也都很棒。谢谢。

这是让我陷入循环的比较部分。不是连接表的直接更新。这就是为什么另一个问题不太正确的原因。

【问题讨论】:

  • WHERE ...... AND table1.column1 != table2.column2
  • where ... case 没有多大意义......为什么还要有一个案例? where ... AND t1.c1 = t2.c2?

标签: sql sql-server join sql-update case


【解决方案1】:

关于有问题的代码,我认为你需要这样的东西:

UPDATE table1
SET table.column1 = table2.column2
FROM table1
inner join table2 ON table1.KEY = table2.KEY
           and table1.column4 = something 
           and table1.DATE between '10/12/14' and '10/15/14'
           and table1.column1 != table2.column2

【讨论】:

  • 谢谢!这行得通……我知道这很简单,我只是看不到。
【解决方案2】:
UPDATE t1
SET t1.column1 = t2.column2
 FROM table1 t1
inner join table2 t2 ON t1.[KEY] = t2.[KEY]
WHERE column4 = 'something' 
AND [DATE] >= '20141012'   --<-- Avoid using between operator for dates
AND [DATE] <= '20141015'   --<-- Also use ASNI date format YYYYMMDD (Sargable)
AND t1.column1 <> t2.column2

避免对日期值使用 Between 运算符的原因阅读此What do BETWEEN and the devil have in common?

【讨论】:

    猜你喜欢
    • 2015-03-03
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2015-01-27
    • 2018-02-25
    • 1970-01-01
    相关资源
    最近更新 更多