关于left join 查询的一个小误区
2012-07-21 18:30
155 查看
两个表 a b
a
ID 代码 颜色 类别
1 yy 红色 1
2 dd 白色 2
b
ID 代码 名称 类别
1 dd 社保科 1
2 dd 劳务科 2
3 xx 保卫科 1
4 xx 资料室 2
5 yy 宣传科 2
sql:
select a.代码,a.颜色,b.名称 from a left join b on a.代码=b.代码 where a.类别=1 and b.类别=1
结果
代码 颜色 名称
---------------------- 无记录 ,显然这不是我想要的
原来 在left join 查询中,where语法如果 加了限制右表 b的条件 ,就会参与到整个查询中
修改
select a.代码,a.颜色,b.名称 from a left join b on a.代码=b.代码 and a.类别=b.类别 where a.类别=1
结果正确
select a.代码,a.颜色,b.名称 from a left join b on a.代码=b.代码 and b.类别=1 where a.类别=1 语法错误
顺便说一句 ,如果有多个表lieft join,在access中,需要用括号
select a.代码,a.颜色,b.名称,c.x from ((a left join b on a.代码=b.代码 and a.类别=b.类别) left join c on a.id=c.id ) where a.类别=1
a
ID 代码 颜色 类别
1 yy 红色 1
2 dd 白色 2
b
ID 代码 名称 类别
1 dd 社保科 1
2 dd 劳务科 2
3 xx 保卫科 1
4 xx 资料室 2
5 yy 宣传科 2
sql:
select a.代码,a.颜色,b.名称 from a left join b on a.代码=b.代码 where a.类别=1 and b.类别=1
结果
代码 颜色 名称
---------------------- 无记录 ,显然这不是我想要的
原来 在left join 查询中,where语法如果 加了限制右表 b的条件 ,就会参与到整个查询中
修改
select a.代码,a.颜色,b.名称 from a left join b on a.代码=b.代码 and a.类别=b.类别 where a.类别=1
结果正确
select a.代码,a.颜色,b.名称 from a left join b on a.代码=b.代码 and b.类别=1 where a.类别=1 语法错误
顺便说一句 ,如果有多个表lieft join,在access中,需要用括号
select a.代码,a.颜色,b.名称,c.x from ((a left join b on a.代码=b.代码 and a.类别=b.类别) left join c on a.id=c.id ) where a.类别=1
相关文章推荐
- 一个sql提问,引起的研究。关于union all 中,嵌套查询和直接查询的效率比较。
- 关于 HTTP GET/POST 请求参数长度最大值的一个理解误区
- 关于 操作必须使用一个可更新的查询 的错误
- 【40分】关于ASP代码:就想做一个数据库查询信息,为什么不行呢!!VS2010环境
- 简述一个关于null的理解误区:null不等于null
- 关于 HTTP GET/POST 请求参数长度最大值的一个理解误区(转载)
- 一个误区(关于javascript的字符串拼接)
- 关于 HTTP GET/POST 请求参数长度最大值的一个理解误区
- 关于java赋值的新手的一个小误区
- 一个误区(关于javascript的字符串拼接)
- SQL 关于LEFT JOIN关键字解析(多表查询)
- 简述一个关于null的理解误区:null不等于null
- 关于 HTTP GET/POST 请求参数长度最大值的一个理解误区
- 简述一个关于null的理解误区:null不等于null--【叶子】
- 一个误区(关于javascript的字符串拼接)
- 关于autorelease一个认识的误区
- [转载]关于隐式提供缺省构造函数的一个误区
- 关于:为什么简单的一个select查询都要加上事务控制
- 关于 HTTP GET/POST 请求参数长度最大值的一个理解误区
- 求助:关于一个查询的SQL语句,请高人指点如何实现,谢谢!