即使要比较的表中不存在该字段,SQL - IN 运算符仍然有效。这怎么可能?

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

这里我有两个表 TB1 和 TB2。

CREATE TABLE TB2(
COL1 NUMBER,
COL2 VARCHAR(10)
);

CREATE TABLE TB1(
COL1 NUMBER,
COL2 VARCHAR(10),
COL3 NUMBER,
COL4 VARCHAR(10)
);

包含以下值。

TB1

COL1    COL2    COL3    COL4
1   A   1   A
2   B   2   B

TB2

COL1    COL2
1   A

即使 TB2 中不存在 COL3,以下语句也可以正常运行,不会出现错误。这怎么可能?

SELECT * FROM TB1
WHERE COL3 IN (
  SELECT COL3 
  FROM TB2
  );

另一方面,当我使用 EXISTS 时,它会返回错误。

SELECT * FROM TB1
WHERE EXISTS(
  SELECT 1 
  FROM TB2
  WHERE TB1.COL3 = TB2.COL3
  );

它们有何不同?

sql oracle exists in-operator
1个回答
0
投票

COL3
不是内部作用域的局部,而是外部作用域的局部。查询有效:

SELECT *
FROM   TB1
WHERE  TB1.COL3 IN (
  SELECT TB1.COL3 
  FROM   TB2
);
© www.soinside.com 2019 - 2024. All rights reserved.