gpt4 book ai didi

sql - 仅更新与另一个表中的行不匹配的行

转载 作者:行者123 更新时间:2023-12-04 15:53:19 25 4
gpt4 key购买 nike

我有 3 个表:

1) tblPerson

id      pin         name       dept_id       
---|-----------|------------|------------|
1 | 123 | Lisa | 100 |
2 | 234 | Rob | 200 |

2) tbl部门

id     dept_name      
-----|-----------|
100 | IT |
200 | HR |

3) 主控

id     emplid       name        m_dept       
---|-----------|------------|------------|
1 | 123 | Lisa | IT |
2 | 234 | Rob | HR |

• tblDepartment 从 tblMaster 中存在的现有部门获取其行

• 在 tblPerson 中,dept_id 是来自 tblDepartment 的外键

我正在尝试创建一个查询,该查询将更新 tblPerson 中 m_dept 与链接到人员的 dept_id 的 dept_name 不匹配的所有行的 dept_id。

例如,如果在 tblMaster 中,我将 m_dept 下的“IT”从第 1 行更改为“HR”,运行查询会将 tblPerson 中第 1 行的 dept_id 更改为“200”

SQL 查询:

UPDATE [dbo].[tblPerson] 
SET dept_id = d.id
FROM [dbo].[tblMaster] m
INNER JOIN [dbo].[tblPerson] p
ON p.pin = m.emplid
INNER JOIN [dbo].[tblDepartment] d
ON d.dept = m.m_dept

上面的查询将更新所有行..当我尝试添加时:

WHERE d.dept != m.m_dept

然后我将 tblMaster 中第 1 行的 m_dept 'IT' 更改为 'HR' ..它不会更新任何内容

需要帮助;m;

最佳答案

您目前正在使用 d.dept = m.m_dept(在 JOIN 条件下)和 d.dept != m.m_deptWHERE 中,因此您当然不会更新任何行。

您可以使用 EXISTSNOT EXISTS,或者另一个 JOIN:

UPDATE P
SET P.dept_id = D1.id
FROM dbo.tblPerson P
INNER JOIN dbo.tblMaster M
ON P.pin = M.emplid
INNER JOIN dbo.tblDepartment D1
ON D1.dept_name = M.m_dept
INNER JOIN dbo.tblDepartment D2
ON P.dept_id = D2.id
WHERE D1.dept_name <> D2.dept_name
;

关于sql - 仅更新与另一个表中的行不匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52971604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com