这里我有两个表 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
);
它们有何不同?
COL3
不是内部作用域的局部,而是外部作用域的局部。查询有效:
SELECT *
FROM TB1
WHERE TB1.COL3 IN (
SELECT TB1.COL3
FROM TB2
);