子查询有不存在的字段,但整个SQL运行没有任何错误

问题描述 投票:0回答:1

当我在 MySQL 中运行此 sql 时,没有出现任何错误。但是,表

entity_id
中不存在
b

select
  entity_id
from
  a
where
  entity_type = 2
  and is_deleted = 0
  and entity_id in (
    select
      strategy_id
    from
      b
    where 
      strategy_type = 1 
      and entity_id != 2
)

当我单独运行子查询时,它报告了

Unknown column 'entity_id' in 'where clause'
,这符合预期。

此外,我在子查询中将

entity_id
更改为一个混乱的名称(例如,
xaasaz
)。当我重新运行整个 SQL 时,它立即报告了
Unknown column
错误。

MySQL 版本是

5.7.23-23-log

为什么会发生这种情况?谢谢您的帮助。

mysql
1个回答
0
投票

这里有一个别名/表引用技巧在起作用。 这是您的重复查询:

SELECT entity_id
FROM a
WHERE
    entity_type = 2 AND
    is_deleted = 0 AND
    entity_id IN (
        SELECT strategy_id
        FROM b
        WHERE strategy_type = 1 AND
              entity_id != 2
);

子查询中似乎发生的情况是,MySQL 未能在

b
表中找到任何名为
entity_id
的列,因此正在
a
表中查找。

© www.soinside.com 2019 - 2024. All rights reserved.