Postgresql IN 语句[英] Postgresql IN statement

本文是小编为大家收集整理的关于Postgresql IN 语句的处理方法,想解了Postgresql IN 语句的问题怎么解决?Postgresql IN 语句问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

为什么当 profile 表中不存在 user_id 列时,此查询会删除所有用户?

初始查询:

DELETE FROM users
    WHERE user_id IN (
        SELECT user_id FROM profile
        )
    AND user_id != 35
    AND user_id != 6; 

更具体.

IN语句查询返回:

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

推荐答案

根据 ANSI 标准,此行为是正确的.

如果未限定的列名未在内部范围内解析,则将考虑外部范围.因此,您正在执行一个无意的相关子查询.

只要表profile至少包含一行那么

 FROM users
 WHERE user_id IN (
        SELECT user_id FROM profile
        )

最终将匹配 users 中的所有行(除了任何 users.user_id IS NULL 因为 WHERE NULL IN (NULL) 不评估为真).为避免这种可能的问题,您可以使用两个部分名称.

DELETE FROM users
WHERE  user_id IN (SELECT p.user_id
                   FROM   profile p) 

会报错

<块引用>

列 p.user_id 不存在:

本文地址:https://www.itbaoku.cn/post/1764011.html