SQL 更新加入 2 个表
Posted
技术标签:
【中文标题】SQL 更新加入 2 个表【英文标题】:SQL update joining 2 tables 【发布时间】:2017-08-15 19:10:17 【问题描述】:在 MS Access 中,我尝试根据与另一个表中的列连接不匹配的列连接来更新 1 个表。这是我需要做的。
If ((Table1.A + Table1.B + Table1.C + Table1.D)
NOT EQUAL TO (Table2.E + Table2.F + Table2.G + Table2.H))
Then set Table1.error = x
我知道这是某种类型的 SQL 连接,但我正在努力解决它。
更新: 好吧,我终于有事干了。这就是我所拥有的:
SELECT [Table1].[A] & [Table1].[B] & [Table1].[C] & [Table1].[D] AS Expr1
FROM Table1, Table2
WHERE ((([Table2].[E] & [Table2].[F] & [Table2].[G] & [Table2].[H])<>
[Table1].[A] & [Table1].[B] & [Table1].[C] & [Table1].[D]));
它会运行,但它会向我显示每条不匹配的行。我需要在表 1 中搜索表 2 中不存在的任何行,并且只返回表 1 中那些不匹配的行。
【问题讨论】:
好吧,我终于有工作要做了。这就是我所拥有的: 好吧,我终于有工作要做了。这就是我所拥有的:SELECT [Table1].[A] & [Table1].[B] & [Table1].[C] & [Table1].[D] AS Expr1 FROM Table1, Table2 WHERE ((([Table2 ].[E] & [Table2].[F] & [Table2].[G] & [Table2].[H])[Table1].[A] & [Table1].[B] & [Table1 ].[C] & [Table1].[D]));那会运行,但它向我展示了每条无与伦比的线。我需要在表 1 中搜索表 2 中不存在的任何行,并且只返回表 1 中那些不匹配的行。 【参考方案1】:UPDATE (SELECT Table1.error
FROM Table1,
Table2
WHERE ((Table1.A + Table1.B + Table1.C + Table1.D)
NOT EQUAL TO (Table2.E + Table2.F + Table2.G + Table2.H)))
SET Table1.error = x
【讨论】:
【参考方案2】:您可以尝试使用 on 子句对 结果进行更新连接
update T
set t.error = x
FROM Table1 AS T
INNER JOIN (
SELECT Table2.E + Table2.F + Table2.G + Table2.H as T2_RESULT
from Table2
) AS ON T2.T2_RESULT <> (Table1.A + Table1.B + Table1.C + Table1.D)
【讨论】:
【参考方案3】:UPDATE Table1 AS T1
INNER JOIN Table2 AS T2
ON (Table1.A + Table1.B + Table1.C + Table1.D) NOT EQUAL TO (Table2.E + Table2.F + Table2.G + Table2.H))
set T1.error = x
如果列的总和不相等,它将使用内部连接 Table2
更新 Table1.error
。
【讨论】:
请不要只发布代码。解释为什么它可以解决问题。【参考方案4】:假设表 2 中的字段 [E] 永远不能为空,您可以通过在 Left Join 后搜索 Nulls 找到您的 UNMATCHED 表 1 记录:
SELECT [T1].[A] & [T1].[B] & [T1].[C] & [T1].[D] AS Concat1
FROM
[Table1] as T1
Left Join [Table2] as T2 ON
((([T2].[E] & [T2].[F] & [T2].[G] & [T2].[H]) = [T1].[A] & [T1].[B] & [T1].[C] & [T1].[D]))
WHERE
[T2].[E] is NULL;
这将返回所有没有匹配表 2 记录的表 1 记录。
您可以将该查询调用到您的更新中。
【讨论】:
【参考方案5】:我意识到这些字段不需要连接(它们在之前的代码中被连接,所以我认为这是有原因的)。所以我做了一个无与伦比的查询向导,在同一个查询中分别使用了 4 个字段。
【讨论】:
以上是关于SQL 更新加入 2 个表的主要内容,如果未能解决你的问题,请参考以下文章