Foxtable(狐表)用户栏目专家坐堂 → [求助]ACCESS中执行和狐表窗口执行的SQL结果不同


  共有3407人关注过本帖树形打印复制链接

主题:[求助]ACCESS中执行和狐表窗口执行的SQL结果不同

帅哥哟,离线,有人找我吗?
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109505 积分:557193 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/6/16 11:01:00 [显示全部帖子]

把这些表的部分数据导出一个新的access数据库上传测试

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109505 积分:557193 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/6/16 14:20:00 [显示全部帖子]

汗,测试半天,是*号和%号的问题

WBS01的SQL:
SELECT DISTINCT TbWBS.ID, TbModD.ProID, TbModD.ModID
FROM TbWBS INNER JOIN ((TbModD INNER JOIN TbWL ON (TbModD.ProID = TbWL.ProID) AND (TbModD.WLID = TbWL.ID)) INNER JOIN TbWBS AS TbWBS_1 ON (TbWL.WBSID = TbWBS_1.ID) AND (TbWL.ProID = TbWBS_1.ProID)) ON TbWBS.ProID = TbModD.ProID
WHERE (((TbModD.ProID)="dd95073e-69a5-4213-93df-a732df87dd97") AND ((TbModD.ModID)="7d7bc6fe-b046-4991-8fde-4f72951405e8") AND ((TbWBS_1.C) Like [tbwbs].[C] & '.%' Or (TbWBS_1.C)=[tbwbs].[C]))


在access里执行的时候,like里使用%是没有效果的,必须使用*号。而.net的数据库引擎刚好相反,*号没有用,必须使用%号。所以狐表里的执行结果是正确的

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109505 积分:557193 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/6/16 14:40:00 [显示全部帖子]

就像现在使用的一样,在access里WBS01做成一个查询,直接调用即可。

至于你sql的完整逻辑,没有看懂,不知道怎么优化

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109505 积分:557193 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/6/16 15:26:00 [显示全部帖子]

把需要加条件的列都select到最外层,然后像平时一样加条件到最后即可

其次子查询也可以加条件

FROM ((select * from WBS01 where 条件)as  WBS01 LEFT JOIN (WBS02的SQL) as  WBS02 …………,

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109505 积分:557193 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/6/19 17:31:00 [显示全部帖子]

给C字段加上索引。

like操作本来效率就很低的。可以考虑加载后用代码处理。或者在代码里使用递归进行操作

 回到顶部