当我在 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
为什么会发生这种情况?谢谢您的帮助。
这里有一个别名/表引用技巧在起作用。 这是您的重复查询:
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
表中查找。