有点奇怪!SQL中子查询存在语法错误居然能返回结果?!
2009-02-06 14:36
441 查看
您可以试试在数据库Northwind执行语句1:
语句1:select OrderId from Products where OrderID = 10250
结果:
消息 207,级别 16,状态 1,第 1 行
列名 'OrderID' 无效。
消息 207,级别 16,状态 1,第 1 行
列名 'OrderId' 无效。
语句2:select * from [dbo].[Order Details] where OrderId In (select OrderId
from Products where OrderID = 10250)
结果:
10250 41 7.70 10 0
10250 51 42.40 35 0.15
10250 65 16.80 15 0.15
上述结果是不是让你大跌眼镜,但却是真实存在的情况!
究其原因,主要是SQL自动解析列名(列OrderID在表Products中找不到就到[Order Details]中找,结果找到了,当然根据作用域先后顺序)
如果试试把上面语句改为如下:
select * from [dbo].[Order Details] where OrderId In (select OrderId
from Products p where p.OrderID = 10250)
就能看到报错了。那么前面能返回结果的错误SQL语句究竟是如何执行的呢?
其实,首先,OrderID由于不在Products表中,因此它把该条件直接作用到[Order Detail]表上从而返回结果。
语句1:select OrderId from Products where OrderID = 10250
结果:
消息 207,级别 16,状态 1,第 1 行
列名 'OrderID' 无效。
消息 207,级别 16,状态 1,第 1 行
列名 'OrderId' 无效。
语句2:select * from [dbo].[Order Details] where OrderId In (select OrderId
from Products where OrderID = 10250)
结果:
10250 41 7.70 10 0
10250 51 42.40 35 0.15
10250 65 16.80 15 0.15
上述结果是不是让你大跌眼镜,但却是真实存在的情况!
究其原因,主要是SQL自动解析列名(列OrderID在表Products中找不到就到[Order Details]中找,结果找到了,当然根据作用域先后顺序)
如果试试把上面语句改为如下:
select * from [dbo].[Order Details] where OrderId In (select OrderId
from Products p where p.OrderID = 10250)
就能看到报错了。那么前面能返回结果的错误SQL语句究竟是如何执行的呢?
其实,首先,OrderID由于不在Products表中,因此它把该条件直接作用到[Order Detail]表上从而返回结果。
相关文章推荐
- Hibernate原生sql查询返回结果问题
- Linq查询结果集比对应的sql语句查询结果集不一致,存在重复结果
- java jdbc调用oracle的函数或过程返回SQL语句查询的结果集
- 用jdbc做查询操作时动态拼接参数报SQL语法错误的问题
- Linq to Sql 或linq to entities 与SQL查询结果不一致 返回重复结果问题
- sql用1来表示查询结果是否为空 & 判断表是否存在简易方法
- SQL Management Studio中返回长查询结果被截断的问题
- 在SQL中直接使用存储过程查询返回的结果集
- TP 查询时候标题带有&的字符,查询没有结果!打出SQL语句去数据库查,返回有结果!
- Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集
- Hibernate查询之SQL查询,查询结果用new新对象的方式接受,hql查询,通过SQL查询的结果返回到一个实体中,查询不同表中内容,并将查到的不同表中的内容放到List中
- SQL Management Studio中返回长查询结果被截断的问题
- CI框架,select 查询sql,没有结果是返回false还是空数组? 什么情况下返回false?
- 将SQL查询结果以字符串形式返回
- SQL判断查询结果是否存在EXISTS
- Hibernate查询之SQL查询,查询结果用new新对象的方式接受,hql查询,通过SQL查询的结果返回到一个实体中,查询不同表中内容,并将查到的不同表中的内容放到List中
- SQL Server 中的XML支持,查询返回XML,Web访问SQL取XML形式结果
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- SQL高级语法-FULL JOIN 关键字 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
- 和SQL内连接不同,SQL外连接返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行,下面就为您详细介绍SQL外连接,