假设有两个表:
Table A: A1,A2,A_Other
Table B: B1,B2,B_Other
在以下示例中,是针对固定值检查的条件,例如,=’ABC’或< 45. 我写了一个如下(1)的查询:
Select * from A
Where A1 IN (
Select Distinct B1 from B
Where B2 is something
And A2 is something
);
我真正打算写的是(2):
Select * from A
Where A1 IN (
Select Distinct B1 from B
Where B2 is something
)
And A2 is something;
奇怪的是,两个查询都返回了相同的结果.在查看查询1的解释计划时,看起来就像执行子查询时一样,因为条件A2不适用于子查询,它被推迟用作主查询结果的过滤器.
我通常希望查询1失败,因为子查询本身会失败:
Select Distinct B1 from B
Where B2 is something
And A2 is something; --- ERROR: column "A2" does not exist
但我发现情况并非如此,Postgres将不适用的子查询条件推迟到主查询.
这是标准行为还是Postgres异常?这记录在哪里,这个功能叫做什么?
此外,我发现如果我在表B中添加列A2,则只有查询2按预期工作.在这种情况下,查询2中的引用A2仍将引用A.A2,但查询1中的引用将引用新列B.A2,因为它现在可直接应用于子查询.
判断一个where条件的对错php sql – IN子查询的WHERE条件影响主查询 – 这是一个功能还是一个错误?...