union all 和where条件一起使用查询数据不对的问题
2017-11-03 16:33
344 查看
最近写sql的时候,需要两张表结合一起查询数据,并且根据条件从查询到的数据中只取一条,结果没有取到数据。
表一 test1
表二 test2
查询语句是这样的:
这个sql的目的是,从两张表中,取出id = 4 的数据,如果有多条,只取一条。
但是查询结果是:
经过分析发现,这条sql等效于下面:
这条sql(下面这个),查询结果是:
然后limit 1, 取出来的就是第一条,即张三-1
所以这条sql应该修改成下面:
第一种修改方式:
第二种修改方式:
这两种修改方式都能正确查询到结果。
记录一下,防止后面再犯这种错误。
表一 test1
id | name |
---|---|
1 | 张三 |
2 | 李四 |
3 | 王五 |
id | name |
---|---|
4 | 小一 |
5 | 小二 |
6 | 小三 |
select id ,name from test1 union select id, name from test 2 where id = 4 limit 1
这个sql的目的是,从两张表中,取出id = 4 的数据,如果有多条,只取一条。
但是查询结果是:
id | name |
---|---|
1 | 张三 |
select id ,name from test1 union ( select id, name from test 2 where id = 4 ) limit 1
这条sql(下面这个),查询结果是:
select id ,name from test1 union ( select id, name from test 2 where id = 4 )
id | name |
---|---|
1 | 张三 |
2 | 李四 |
3 | 王五 |
4 | 小一 |
所以这条sql应该修改成下面:
第一种修改方式:
select id ,name from test1 where id = 4 union select id, name from test 2 where id = 4 limit 1
第二种修改方式:
select t.* from ( select id ,name from test1 union select id, name from test 2 ) t where t.id = 4 limit 1
这两种修改方式都能正确查询到结果。
记录一下,防止后面再犯这种错误。
相关文章推荐
- ThinkPHP 中 M 方法查询数据库最后使用 find() 导致返回结果集 foreach 数据不对的问题
- VS2008下使用Linq To Entity的Skip().Take()分页查询时遇到数据结果不对的问题
- 取得数据库中数据 查询条件where使用规则
- 时间类型数据使用between ...and ..语句条件查询时应注意的问题
- 数据值为NULL,导致条件查询不到正确结果,ISNULL函数的使用解决问题
- 在ASP中使用SQL语句之2:用WHERE子句设置查询条件
- Ruby on Rails,使用where方法对持久化对象进行条件查询
- 关于MYSQL查询时WHERE条件值为数字的问题
- 使用PDF.NET数据开发框架的实体操作语言OQL构造复杂查询条件
- mongodb_查询操作使用_条件查询、where子句等(转并学习)
- SubSonic3.0使用外连接查询时查询不出数据的问题修改
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- Oracle 查询使用union all 与 使用条件or 的查询效率比较
- 使用SSH框架,只能查询数据,不能修改和保存数据的问题
- MySql数据查询的逻辑蕴含条件问题
- Ruby on Rails,使用where方法对持久化对象进行条件查询
- mysql 删除和修改的时候,where 条件中使用原table报错的问题
- Entity Framework 使用注意:Where查询条件中用到的关联实体不需要Include
- 使用hibernate查询时,查询的数据和数据库的不一样问题
- 关于sql条件语句where id in (@参数)执行报错问题(转换成数据类型 int 时失败)(