【问题标题】:Updating field value based on data across three separate tables根据三个单独表中的数据更新字段值
【发布时间】:2021-06-04 20:32:35
【问题描述】:

我一直在尝试根据两个字段(名称、日期)中单独表 (a) 中的相应数据将表 (g) 中字段 (IsException) 的值从 0 更新为 1。两者都出现在那个单独的小表中。我遇到的问题是“名称”字段来自两个单独的系统并且不匹配,但是我有第三个“翻译”表 (t),它应该允许 1:many 关系来帮助限定名称差异.所以基本上我想在调整名称后使用表 a 数据来驱动 g 表中的更新,所以我认为我需要一个 LEFT JOIN,但无法使其正常运行。

最后一次尝试看起来像:

UPDATE g
SET [IsException] = 1 WHERE EXISTS
(SELECT 1 FROM a
WHERE g.Date = a.Date
AND (LEFT JOIN t ON a.Name = t.Aname) t.Gname = g.Name)

表格中的样本数据看起来有点像:

a
Name       Date
Tom        2021-03-01
Sue        2021-02-28

g
Name       Date           IsException
TomT       2021-02-28     0
TomT       2021-03-01     0
SueS       2021-02-28     0
SueS       2021-03-01     0
BobB       2021-02-28     0
BobB       2021-03-01     0

t
AName      GName
Tom        TomT
Sue        SueS
Bob        BobB

因此,目标是让表 g 中的第二行和第三行将 IsException 标志字段从 0 更新为 1。

我已经盯着 UPDATE 和 JOIN 语法看了好几个小时,并仔细研究了其他类似的查询,但无法让它按预期工作。任何正确方向的观点都将不胜感激。

【问题讨论】:

    标签: sql sql-server tsql sql-update


    【解决方案1】:

    这不只是 2 个内部连接的简单案例吗?

    UPDATE G SET
        IsException = 1
    FROM G
    INNER JOIN T on T.GName = G.[Name]
    INNER JOIN A on A.[Name] = T.AName
    WHERE A.[Date] = G.[Date];
    

    【讨论】:

    • 谢谢戴尔!看起来现在一切都在解决。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多