表A的模式:表B的A(x,y,z)模式:B(u,x,v)
[以粗体显示的主键]
对于提到的SQL查询: -
SELECT x
FROM A
WHERE x in ( SELECT x
FROM B
WHERE x<10)
内部查询如何解析这个x提到的是来自表B而不是表A?
x
从最里面的查询中解析出来。限定列名称总是更好,因此请将此查询写为:
SELECT A.x
FROM A
WHERE A.x IN (SELECT B.x
FROM B
WHERE B.x < 10
);
这样做的好处是,如果B.x
不存在,您将收到错误。否则,IN (SELECT x . . .
将引用A.x
(但仅当B.x
不存在时)。