首页 > 解决方案 > 为什么这个带有 in 子句的查询不返回错误?

问题描述

我已经在 sqlfiddle.com 上的不同数据库上尝试过这个

CREATE TABLE a (
  a_col1 int NOT NULL
); 

CREATE TABLE b (
  b_col1 int NOT NULL
); 

select * from a where a_col1 in (select a_col1 from b);

“从 b 中选择 a_col1”中的错误不明显吗?填充表 a 它至少在 MySQL 中返回表 a 中的所有行。

标签: sql

解决方案


编译器完全没有错误,只有编写代码的人才会出错。你认为代码说:

where a.a_col1 in (select b.a_col1 from b);

但这不是 SQL 范围规则的工作方式。 a_col1中未找到b,因此 SQL 假定这是一个相关子查询并将其解释为:

where a.a_col1 in (select a.a_col1 from b);

没有奥秘。只是一个坏习惯。 始终限定查询中的列引用。


推荐阅读