根据三个单独表中的数据更新字段值
Updating field value based on data across three separate tables
我一直在尝试根据来自单独 table (a) 的相应数据将 table (g) 中字段 (IsException) 的值从 0 更新为 1字段(名称、日期)当两者的组合出现在那个单独的较小 table 中时。我 运行 遇到的问题是 'name' 字段来自两个独立的系统并且不匹配,但是我有第三个“翻译” table (t) 应该允许1:many 帮助限定名称差异的关系。所以基本上我想在修改名称后使用 table a 数据来驱动 g table 中的更新,所以我想我需要一个 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)
来自 table 的样本数据看起来有点像:
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
所以目标是让 table g 中的第二行和第三行将 IsException 标志字段从 0 更新为 1。
我已经盯着 UPDATE 和 JOIN 语法看了好几个小时,并仔细研究了其他类似的查询,但一直无法让它按预期运行。任何正确方向的观点都将不胜感激。
这不就是 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];
我一直在尝试根据来自单独 table (a) 的相应数据将 table (g) 中字段 (IsException) 的值从 0 更新为 1字段(名称、日期)当两者的组合出现在那个单独的较小 table 中时。我 运行 遇到的问题是 'name' 字段来自两个独立的系统并且不匹配,但是我有第三个“翻译” table (t) 应该允许1:many 帮助限定名称差异的关系。所以基本上我想在修改名称后使用 table a 数据来驱动 g table 中的更新,所以我想我需要一个 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)
来自 table 的样本数据看起来有点像:
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
所以目标是让 table g 中的第二行和第三行将 IsException 标志字段从 0 更新为 1。
我已经盯着 UPDATE 和 JOIN 语法看了好几个小时,并仔细研究了其他类似的查询,但一直无法让它按预期运行。任何正确方向的观点都将不胜感激。
这不就是 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];