当列不存在于profile
表中时,为什么此查询会删除所有用户?Postgresql IN声明
初始查询:
DELETE FROM users
WHERE user_id IN (
SELECT user_id FROM profile
)
AND user_id != 35
AND user_id != 6;
更具体。
中的语句查询返回:
SELECT user_id FROM profile;
ERROR: column "user_id" does not exist
LINE 1: SELECT user_id FROM profile;
运行初始查询回报
DELETE 100
这是为什么发生?
它不应该在错误时停止执行或返回false或null吗?
运行PostgreSQL服务器9.0
的[SQL Server 2008中的管理工作室不检查我的查询语法(HTTP可能重复: //www.stackoverflow.com/questions/4594733/sql-server-2008-management-studio-not-checking-the-syntax-of-my-query) – 2013-05-06 09:20:34
这是正确的行为。子查询引用外部查询中的列是完全有效的。如果您想避免这种错误,请使用两个部分名称。 'DELETE FROM users WHERE user_id IN(SELECT p.user_id FROM profile p)''会给你一个无效的列名错误。 – 2013-05-06 09:22:06
非常感谢@MartinSmith你是对的。 – 2013-05-06 09:29:55