为什么这个SQL会出现语法错误以及如何解决?
UPDATE s
SET s.modified_date = l.action_date
FROM
(SELECT l.action_date, l.user_id FROM item_audit_log) l
WHERE l.user_id = s.staff_id
错误:
Msg 4104,Level 16,State 1,Line 4
多部分标识符" l.action_date"无法受约束。Msg 4104,Level 16,State 1,Line 4
多部分标识符" l.user_id"无法受约束。
答案 0 :(得分:2)
您收到错误是因为子查询在子查询中引用了“l”,但未在子查询中定义(它在外部作用域中定义)。但是,您不需要子查询:
UPDATE s
SET modified_date = l.action_date
FROM staffs s JOIN
item_audit_log l
ON l.user_id = s.staff_id;
这假设您有一个名为s
的表。我想这应该是一个别名,也在FROM
子句中定义。
答案 1 :(得分:0)
由于您的请求是“为什么”,请让我澄清一下:
当引用a时使用别名时,通常会发生此错误 SELECT语句中的列和未使用的别名未定义 SELECT语句的FROM子句中的任何位置。