我有3张桌子:
1)tblPerson
id pin name dept_id
---|-----------|------------|------------|
1 | 123 | Lisa | 100 |
2 | 234 | Rob | 200 |
2)tblDepartment
id dept_name
-----|-----------|
100 | IT |
200 | HR |
3)tblMaster
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;
答案 0 :(得分:2)
您当前同时使用d.dept = m.m_dept
(在JOIN
条件下)和d.dept != m.m_dept
在WHERE
中,因此,您当然不更新任何行。
您使用EXISTS
或NOT 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
;