首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • access数据库为什么不支持left join语句? [已结贴,结贴人:dyjqk]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 20:02:57 楼主
    SQL code
    update a set a.UpDownExtent=round(((b.NewValue-b.YesterdayClose)/b.YesterdayClose)*100,3) from BuyLog a left join SumStock b on a.CodeID=b.CodeID where b.States<>0 and a.UserID=1


    这句在 SQL Server 里执行很正常,可是在access数据库执行就报错:语法错误(操作符丢失)在查询表达式
    请问改如何改正?谢谢!
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-04-21 20:07:031楼 得分:5
    ACCESS ADO访问时是JET-SQL 

    JET-SQL 参考 (如安装OFFICE选择帮助,则直接访问本机)
    C:\Program Files\Common Files\Microsoft Shared\OFFICE11\2052\JETSQL40.CHM

    JET-SQL 参考 
    http://download.csdn.net/source/351771

    Access使用的是Jet-SQL。 

    JET SQL 帮助(jet4 access2000)下载地址 
    http://www.access911.net/index.asp?board=8&recordid=75FAB71E&tt= 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 20:12:102楼 得分:0
    我看了JET-SQL的语法,left join 是支持的啊。为什么还报错呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 20:28:493楼 得分:0
    update BuyLog set a.UpDownExtent=round(((b.NewValue-b.YesterdayClose)/b.YesterdayClose)*100,3)
    from BuyLog a left join SumStock b on a.CodeID=b.CodeID
    where b.States <>0 and a.UserID=1


    update用直接用表名,再试试
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 20:30:004楼 得分:0
    update后不能别名的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 20:30:175楼 得分:0
    SQL code
    update BuyLog set a.UpDownExtent=round(((b.NewValue-b.YesterdayClose)/b.YesterdayClose)*100,3) from BuyLog a left join SumStock b on a.CodeID=b.CodeID where b.States <>0 and a.UserID=1


    这样还是报同样的错!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-04-21 22:27:186楼 得分:7
    --看你对不匹配的数据没有操作.如下即可
    SQL code
    update BuyLog set a.UpDownExtent=round(((b.NewValue-b.YesterdayClose)/b.YesterdayClose)*100,3) from BuyLog a , SumStock b where a.CodeID = b.CodeID and b.States <>0 and a.UserID=1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-04-21 22:29:487楼 得分:0
    --或者.ACCESS里面是不是用isnull就不知道了.
    SQL code
    update BuyLog set a.UpDownExtent= isnull(select round(((b.NewValue-b.YesterdayClose)/b.YesterdayClose)*100,3) from SumStock b where a.CodeID = b.CodeID and b.States <>0 and a.UserID=1 , a.UpDownExtent) from BuyLog a
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 22:45:168楼 得分:0
    SQL code
    update BuyLog set a.UpDownExtent=round(((b.NewValue-b.YesterdayClose)/b.YesterdayClose)*100,3) from BuyLog a , SumStock b where a.CodeID = b.CodeID and b.States <>0 and a.UserID=1


    SQL code
    update BuyLog set a.UpDownExtent= isnull(select round(((b.NewValue-b.YesterdayClose)/b.YesterdayClose)*100,3) from SumStock b where a.CodeID = b.CodeID and b.States <>0 and a.UserID=1 , a.UpDownExtent) from BuyLog a


    这两个还是同样报错:语法错误(操作符丢失)在查询表达式
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 22:52:549楼 得分:0
    引用 1 楼 liangCK 的回复:
    ACCESS ADO访问时是JET-SQL 

    JET-SQL 参考 (如安装OFFICE选择帮助,则直接访问本机) 
    C:\Program Files\Common Files\Microsoft Shared\OFFICE11\2052\JETSQL40.CHM 

    JET-SQL 参考 
    http://download.csdn.net/source/351771 

    Access使用的是Jet-SQL。 

    JET SQL 帮助(jet4 access2000)下载地址 
    http://www.access911.net/index.asp?board=8&recordid=75FAB71E&tt= 


    呵呵..谢谢.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 23:10:0510楼 得分:0
    求助!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 23:15:0911楼 得分:0
    update BuyLog set UpDownExtent=round(((b.NewValue-b.YesterdayClose)/b.YesterdayClose)*100,3) 
    from BuyLog a left join SumStock b on a.CodeID=b.CodeID 
    where b.States <>0 and a.UserID=1

    再试一下!a.UpDownExtent写成UpDownExtent
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 23:16:4612楼 得分:8
    update BuyLog set UpDownExtent=round(((b.NewValue-b.YesterdayClose)/b.YesterdayClose)*100,3) 
    from BuyLog a left join SumStock b on a.CodeID=b.CodeID 
    where b.States  <>0 and a.UserID=1

    这样写语法是没有错误的!a.UpDownExtent换成了UpDownExtent
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 23:19:4713楼 得分:0
    帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-21 23:59:3414楼 得分:0
    to : vchao13

    还是报错:语法错误 (操作符丢失) 在查询表达式 'round(((b.NewValue-b.YesterdayClose)/b.YesterdayClose)*100,3) 
    from BuyLog a left join SumStock b on a.CodeID=b.CodeID' 中。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 08:03:2515楼 得分:0
    我刚才发的sql句没有语法错误,要不你这样,你把.ACCESS数据库导入sql数据库,然后再用上面的语句查询,看看有什么提示,会不会是字段有错,还是ascess不支持round函数。。试试吧!要不不知道错在哪的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 09:11:5016楼 得分:0
    这句是我从sqlserver转到access的,在sqlserver上完全正确,可是在access上就报错!总是报语法错误!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 09:17:3917楼 得分:30
    报错,因为你的写法不对。

    access里的连表更新的语法为:

    update a inner join b on set .. where ..

    这跟t-sql是有区别的。

    语句很简单,我就不写了,你自己对照jet sql的语法更改一下语句就可以了。

    参见。
    http://topic.csdn.net/u/20080315/23/2263bf35-cade-4718-a5fc-2d677efadacf.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-22 09:27:5318楼 得分:0
    fcuandy 正确
    正确写法为
    SQL code
    update BuyLog a left join SumStock b on a.CodeID=b.CodeID set a.UpDownExtent=round(((b.NewValue-b.YesterdayClose)/b.YesterdayClose)*100,3) where b.States<>0 and a.UserID=1


    感谢!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-23 08:15:1319楼 得分:0
    UP!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved