关于SQL等价测试问题
目前做一个小项目,学生答题sql测试的,就是老师出题,学生回答sql语句那种,以前的项目都是用sql语句查询数据库
现在要用程序自动测试两个sql语句是否完全等价,简单的好办了但是越做越发现一个问题,就是sql等价不好判断
具体在现实中遇到这么一个问题
比如 有关系 R (A,B) 目前数据库里的数据有
A B
--------------------------
2 3
3 5
6 7
4 5
如果老师的题目是取出 该关系中所有a > 2的 记录 标准的答案应该是
: select * from r where a>2
大家看到了吧,但是由于数据库里记录的都是a>2的
所以,学生回答可能是
select * from r ;
如果简单的从数据库执行情况检查的话,这两条句子结果是一样的,可是如果记录
A B
--------------------------
1 3
2 5
6 7
4 5
这时,两个句子查询结果就不等价了
当然我这只是举个例子来说明这种sql情况存在,实际中可能还有很多情况存在并不是所有列都是数字类型的
标准sql的列类型可能都有,where后面的条件也是千差万别
现在被卡在这里了,请je上的筒靴们给个思路,这种测试怎么做,目前我只是用antlr分析出sql的where条件出来
作者: kjj
声明: 本文系JavaEye网站发布的原创文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!
已有 0 人发表回复,猛击->>这里<<-参与讨论
JavaEye推荐
现在要用程序自动测试两个sql语句是否完全等价,简单的好办了但是越做越发现一个问题,就是sql等价不好判断
具体在现实中遇到这么一个问题
比如 有关系 R (A,B) 目前数据库里的数据有
A B
--------------------------
2 3
3 5
6 7
4 5
如果老师的题目是取出 该关系中所有a > 2的 记录 标准的答案应该是
: select * from r where a>2
大家看到了吧,但是由于数据库里记录的都是a>2的
所以,学生回答可能是
select * from r ;
如果简单的从数据库执行情况检查的话,这两条句子结果是一样的,可是如果记录
A B
--------------------------
1 3
2 5
6 7
4 5
这时,两个句子查询结果就不等价了
当然我这只是举个例子来说明这种sql情况存在,实际中可能还有很多情况存在并不是所有列都是数字类型的
标准sql的列类型可能都有,where后面的条件也是千差万别
现在被卡在这里了,请je上的筒靴们给个思路,这种测试怎么做,目前我只是用antlr分析出sql的where条件出来
作者: kjj
声明: 本文系JavaEye网站发布的原创文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!
已有 0 人发表回复,猛击->>这里<<-参与讨论
JavaEye推荐
- 上海:高薪诚聘Python开发人员
- 成都:月薪5千到1万招聘Java开发工程师
- 上海:天会皓闻诚聘CTO技术总监
- 上海:月薪1-2万诚聘资深PHP开发人员
- 上海:天会皓闻诚聘资深Java架构师
- 北京:手机之家网站诚聘PHP程序员
- 北京:高薪招聘Java搜索开发工程师
作者:Fervour
出处:http://fervour.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://fervour.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。