NOT IN子查询时,子查询中字段在表中不存在时不报错

时间:2021-09-27 22:05:24

SELECT A.a,B.b FROM TABLE_A AS A
INNER JOIN TABLE_B AS B ON A.b=B.b
WHERE A.a NOT IN (SELECT a FROM TABLE_C)
/**
TABLE_C表里没有a这个字段,但是上面的语句不报错,而将子查询中的字段a改成一个
TABLE_A和TABLE_B里面没有的字段名就报错了。这是什么情况,
子查询里的字段a不是和From后面的表吗?
**/

5 个解决方案

#1


引用 楼主 shuchong1983 的回复:

SELECT A.a,B.b FROM TABLE_A AS A
INNER JOIN TABLE_B AS B ON A.b=B.b
WHERE A.a NOT IN (SELECT a FROM TABLE_C)
/**
TABLE_C表里没有a这个字段,但是上面的语句不报错,而将子查询中的字段a改成一个
TABLE_A和TABLE_B里面没有的字段名就报错了。这是什么情况,
子查询里的字段a不是和From后面的表吗?
**/

子查询的a是属于子查询from后面的TABLE_C,你换成别的当然报错

#2


按道理c表没有a的话应该会报错的,你要不给个真实的环境出来,我这边试试

#3


而将子查询中的字段a改成一个
TABLE_A和TABLE_B里面没有的字段名就报错了?

如果你改成后的这个字段在3个表中都不存在 那肯定会报错,,但只要主表或从表其中一个有的话, 就不会报错。

#4


没写别名的话,那个a就去table_a里找了

#5


三个表里面只要有都不会报错,也不算是bug 就是解析的时候不够严格。

#1


引用 楼主 shuchong1983 的回复:

SELECT A.a,B.b FROM TABLE_A AS A
INNER JOIN TABLE_B AS B ON A.b=B.b
WHERE A.a NOT IN (SELECT a FROM TABLE_C)
/**
TABLE_C表里没有a这个字段,但是上面的语句不报错,而将子查询中的字段a改成一个
TABLE_A和TABLE_B里面没有的字段名就报错了。这是什么情况,
子查询里的字段a不是和From后面的表吗?
**/

子查询的a是属于子查询from后面的TABLE_C,你换成别的当然报错

#2


按道理c表没有a的话应该会报错的,你要不给个真实的环境出来,我这边试试

#3


而将子查询中的字段a改成一个
TABLE_A和TABLE_B里面没有的字段名就报错了?

如果你改成后的这个字段在3个表中都不存在 那肯定会报错,,但只要主表或从表其中一个有的话, 就不会报错。

#4


没写别名的话,那个a就去table_a里找了

#5


三个表里面只要有都不会报错,也不算是bug 就是解析的时候不够严格。