SQL 内连接 2 个具有多列条件的表并更新

Posted

技术标签:

【中文标题】SQL 内连接 2 个具有多列条件的表并更新【英文标题】:SQL Inner join 2 tables with multiple column conditions and update 【发布时间】:2011-03-10 12:46:21 【问题描述】:

我正在使用这个脚本,尝试加入 2 个具有 3 个条件的表并更新 T1:

Update T1 set T1.Inci = T2.Inci 
ON T1.Brands = T2.Brands 
AND T1.Category= T2.Category
AND T1.Date = T2.Date

但我遇到:

Incorrect syntax near the keyword 'ON'.

不知道为什么。

【问题讨论】:

【参考方案1】:
UPDATE
    T1
SET
    T1.Inci = T2.Inci 
FROM
    T1
INNER JOIN
    T2
ON
    T1.Brands = T2.Brands
AND
    T1.Category= T2.Category
AND
    T1.Date = T2.Date

【讨论】:

ONAND 运算符是否只验证相等性?他们能做到相当于if ((T1.Brands < T2.Brands) && (T1.Category > T2.Category))吗? 如果你使用 >< 这样的东西,你可以减少你可以使用的连接类型。相等运算符非常适用于散列连接,但其他运算符则不然。您可能会无意中陷入您的连接花费 O(n^2) 时间(嵌套循环连接)的情况。【参考方案2】:

你需要做的

Update table_xpto
set column_xpto = x.xpto_New
    ,column2 = x.column2New
from table_xpto xpto
   inner join table_xptoNew xptoNew ON xpto.bla = xptoNew.Bla
where <clause where>

如果您需要更好的答案,可以给我们更多信息:)

【讨论】:

【参考方案3】:
UPDATE T1,T2 
INNER JOIN T1 ON  T1.Brands = T2.Brands
SET 
T1.Inci = T2.Inci
WHERE
    T1.Category= T2.Category
AND
    T1.Date = T2.Date

【讨论】:

读者可以理解为内连接更新。至少语法方式。【参考方案4】:

您应该使用 sql 连接来连接 T1 和 T2 表,以便从两个表中进行分析。学习加入链接:https://www.w3schools.com/sql/sql_join.asp

【讨论】:

以上是关于SQL 内连接 2 个具有多列条件的表并更新的主要内容,如果未能解决你的问题,请参考以下文章

当您连接 2 个具有相同架构的表并检查除一个以外的所有字段是不是相等时,如何避免在 SQL 中编写冗长的 where 子句?

通过多列连接并避免 SQL 中的 OR 的最佳方法

SQL中外连接与内连接之间的区别

内连接和没有任何连接条件的表中有两个ON条件是啥意思

选择一个表并连接 2 个不同的表

sql中的内连接使用问题