Maz*_*der 4 sql sql-server-2008
create table Mytable1
(ID int,
Fname varchar(50)
)
create table Mytable2
(ID int,
Lname varchar(50)
)
insert into Mytable1 (ID,Fname)
values (1,'you')
insert into Mytable1 (ID,Fname)
values (2,'Tou')
insert into Mytable1 (ID,Fname)
values (3,'Nou')
insert into Mytable2 (ID,Lname)
values (1,'you2')
Run Code Online (Sandbox Code Playgroud)
Fname表中不存在该字段Mytable2但是我们有以下查询的结果:
select * from Mytable1 where Fname in (select Fname from Mytable2)
Run Code Online (Sandbox Code Playgroud)
注意:我使用sql server 2008,结果是表Mytable1的所有行
这是SQL中的错误吗?
小智 6
不,这不是一个错误.
如果将表别名添加到整个查询中使用的字段,您可以看到发生的事情更清楚:
select * from Mytable1 mt1
where mt1.Fname in (select mt1.Fname from Mytable2 mt2)
Run Code Online (Sandbox Code Playgroud)
- 即.子查询正在引用(并返回)主查询中的值.
如果您将查询更改为:
select * from Mytable1 mt1
where mt1.Fname in (select mt2.Fname from Mytable2 mt2)
Run Code Online (Sandbox Code Playgroud)
- 你得到一个错误.
(SQLFiddle 这里)
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |