我的数据结构如下:
Table 1 - Employee</b>
-ID
-Name
-Address
-City
-State
...
Table 2 - Audit
-Address
-City
-State
...
我需要通过将较小审计表中的地址,城市和州与较大雇员表中的地址信息进行匹配(假设没有雇员共享地址),将雇员表中的相应ID插入审计表中。
这是我一直在使用的代码,查询生成了我想要的数据,但是更新,设置序列失败并显示以下消息:
消息512,级别16,状态1,行1子查询返回的值大于1。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
UPDATE AuditTable SET employee_id = (
SELECT e.employee_id
FROM EmployeeTable e
JOIN AuditTable a
ON e.address = a.address
AND e.home_city = a.home_city
AND e.home_st = a.home_st
)
同一名员工需要能够在审核表中重复多次,并且仍然显示相同的ID,这导致了我的问题。我已经尝试将=替换为IN并在我的select语句中使用TOP 1,但是没有运气得到我需要的东西。
您的查询的问题是子查询与正在更新的表不相关,因此它会生成多个记录。
如果表中没有(address, home_city, home_st)
元组重复项Employee
,则可以使用简单的相关子查询:
UPDATE AuditTable SET employee_id = (
SELECT e.employee_id
FROM EmployeeTable e
WHERE
e.address = AuditTable.address
AND e.home_city = AuditTable.home_city
AND e.home_st = AuditTable.home_st
)
如果可能发生重复,则可以使用TOP 1
或聚合函数,例如MAX()
:
UPDATE AuditTable SET employee_id = (
SELECT TOP 1 e.employee_id
FROM EmployeeTable e
WHERE
e.address = AuditTable.address
AND e.home_city = AuditTable.home_city
AND e.home_st = AuditTable.home_st
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句