我正在尝试编写一个简单的相关子查询,删除除最新成员之外的所有成员的所有记录。
DELETE FROM table1 p
WHERE member_id IN (1, 2,3)
AND create_dttm < (SELECT MAX(create_dttm)
FROM table1
WHERE member_id = p.member_id)
但我收到错误消息
'p'附近的语法不正确。
我可以轻松编写3个查询来完成工作。但很想知道这里出了什么问题?能否请您告诉我如何正确编写此查询?
提前致谢
答案 0 :(得分:2)
尝试
DELETE p
FROM table1 p
WHERE member_id IN (1, 2,3)
AND create_dttm < (SELECT MAX(create_dttm)
FROM table1
WHERE member_id = p.member_id)
答案 1 :(得分:2)
作为替代方案,您可以在子查询中对表进行别名,并通过表的真实名称引用外部实例的member_id
:
DELETE FROM table1
WHERE WHERE member_id IN (1, 2,3)
AND create_dttm < (SELECT MAX(create_dttm)
FROM table1 p
WHERE table1.member_id = p.member_id)
在SQL Server中,为表分配别名时,不能再在同一语句中按原始名称引用该表。因此,在子查询中使用table1.
前缀列前缀,您肯定会引用外部表。
答案 2 :(得分:1)
并为表格使用一些别名:
DELETE FROM table1 p
WHERE p.member_id IN (1, 2,3)
AND p.create_dttm < (SELECT MAX(p1.create_dttm)
FROM table1 p1
WHERE p1.member_id = p.member_id)
答案 3 :(得分:1)
尝试以下
DELETE p FROM table1 p
WHERE member_id IN (1, 2,3)
AND create_dttm < (SELECT MAX(create_dttm)
FROM table1
WHERE member_id = p.member_id)