Foxtable(狐表)用户栏目专家坐堂 → [求助]如何写多条件关联?避免选择后记录重复


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

主题:[求助]如何写多条件关联?避免选择后记录重复

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


加好友 发短信
等级:幼狐 帖子:134 积分:1047 威望:0 精华:0 注册:2014/11/24 11:07:00
[求助]如何写多条件关联?避免选择后记录重复  发帖心情 Post By:2014/12/3 11:42:00 [只看该作者]

前提:有三个表

表A(各种学校的期间对照表)的字段如下
学校类型 期间标志 期间
中专 2009 2009年
大专 2013 2013年
中专 2011 2011年
本科 2011 2011年
本科 2012 2012年
大专 2014 2014年
大专 2015 2015年
本科 2013 2013年
本科 2014 2014年
中专 2012 2012年


表B(各种学校各教学任务对照表)的字段如下
学校类型 教学任务 开始期间 结束期间
中专 语文 2009 2009
大专 英语 2013 2014
中专 英语 2009 2010
本科 微积分 2012 2014
本科 数据结构 2011 2012
大专 C语言 2013 2013
大专 线性代数 2013 2015
本科 英语 2011 2014
本科 基础化学 2012 2012
中专 概率论 2010 2011

表BC某种学校某教学任务)的字段如下
学校类型 教学任务 
本科       微积分

希望得到:
(表c所列教学任务各期间明细表,即以下表)

学校类型 教学任务    期间  期间标志 
本科       微积分     2012年 2012
本科       微积分     2013年 2013
本科       微积分     2014年 2014


拟写如下语句:
Select b.[学校类型] ,b.[教学任务] ,a.[期间] , a.[期间标志] From ({表A} a Left Join {表B} b On a.[期间标志] Between b.[开始期间] And b.[结束期间]) Left Join {表C} c On b.[学校类型] = C.[学校类型] And b.[教学任务] = c.[教学任务] 

执行sql测试时,报错如下:
两个操作符之间没有 And 在查询表达式 'a.[期间标志] Between b.[开始期间]' 中。

经查,on 后面的关联条件要用括号含住。改之后的语句如下
Select b.[学校类型] ,b.[教学任务] ,a.[期间] , a.[期间标志] From ({表A} a Left Join {表B} b On (a.[期间标志] Between b.[开始期间] And b.[结束期间])) Left Join {表C} c On b.[学校类型] = C.[学校类型] And b.[教学任务] = c.[教学任务]

但运行之后,出现重复行。成了原来的2倍记录数.

求助:
如何改写上述语句达到目的?
[此贴子已经被作者于2014-12-3 13:47:44编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/3 11:43:00 [只看该作者]


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


加好友 发短信
等级:幼狐 帖子:134 积分:1047 威望:0 精华:0 注册:2014/11/24 11:07:00
  发帖心情 Post By:2014/12/3 11:49:00 [只看该作者]

想过,不过是要在程序中的控件使用。。。上面自写的代码报错。。。。

所以想请大师针对性的改代码,看哪出错! 再次请求帮助。。。。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/3 12:00:00 [只看该作者]

 具体问题,请上传具体例子才能测试。

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


加好友 发短信
等级:幼狐 帖子:134 积分:1047 威望:0 精华:0 注册:2014/11/24 11:07:00
见附件。。。  发帖心情 Post By:2014/12/3 13:26:00 [只看该作者]

请帮忙改一下我上面的语句。。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目13.rar


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


加好友 发短信
等级:幼狐 帖子:134 积分:1047 威望:0 精华:0 注册:2014/11/24 11:07:00
自己解决如下  发帖心情 Post By:2014/12/3 14:12:00 [只看该作者]

Select b.[学校类型] ,b.[教学任务] ,a.[期间] , a.[期间标志] From ({表B} b Left Join  {表A} a On ((a.[期间标志] Between b.[开始期间] And b.[结束期间]) And (a.[学校类型] = b.[学校类型])))  Inner Join {表C} c On (b.[学校类型] = C.[学校类型] And b.[教学任务] = c.[教学任务])

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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2014/12/3 14:21:00 [只看该作者]

Select c1.* from (Select c.学校类型,c.教学任务,a.期间标志,a.期间 from {表C} As C left outer join {表A} As a on c.学校类型 = a.学校类型) As C1 inner join {表B} As b on c1.学校类型 = b.学校类型 And c1.教学任务 = b.教学任务 And (c1.期间标志 between b.开始期间 And b.结束期间)

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/3 14:23:00 [只看该作者]

Select b.[学校类型] ,b.[教学任务] ,a.[期间] , a.[期间标志] From ({表B} b inner Join  {表A} a On a.[学校类型] = b.[学校类型]) Inner Join {表C} c On (b.[学校类型] = C.[学校类型] And b.[教学任务] = c.[教学任务]) where a.[期间标志] Between b.[开始期间] And b.[结束期间]

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


加好友 发短信
等级:幼狐 帖子:134 积分:1047 威望:0 精华:0 注册:2014/11/24 11:07:00
感谢感谢,我再消化消化。。。。  发帖心情 Post By:2014/12/3 14:58:00 [只看该作者]

真是感谢。特别有点甜的写法最不绕脑子,喜欢。jspta的思路顺便帮我解决了一个很长时间没解决的小问题,他山之石啊。。。。
[此贴子已经被作者于2014-12-3 15:02:52编辑过]

 回到顶部