如果内部和外部查询的FROM子句中的表中有共同的属性?

时间:2017-12-24 23:20:40

标签: sql database

表A的模式:A( x ,y,z) 表B的模式:B( u ,x,v)

[以粗体显示的主键]

对于上面提到的SQL查询: -

SELECT x
FROM   A
WHERE x in ( SELECT x 
           FROM B
           WHERE x<10)

内部查询如何解析这个x提到的是来自表B而不是表A?

1 个答案:

答案 0 :(得分:1)

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不存在时)。