首页 新闻 搜索 专区 学院

my sql问题,根据编号显示中文职位,不在同一个表中也不是一对一的关系

0
悬赏园豆:60 [已解决问题] 解决于 2022-02-28 22:31

SELECT TOP 1000 [Resid]
      ,[Perid]
      ,[Username]
      ,[ResumeName]
      ,[LanguageSign]
      ,[VisitNum]
      ,[VisitState]
      ,[DefaultSign]
      ,[cnResume]
      ,[Appraise]
      ,[WorkObject]
      ,[SkillDesc]
      ,[SkillKeep]
      ,[CurrentTrade]
      ,[CurrentJobType]
      ,[CurrentJob]
      ,[CurrentJobLevel]
      ,[WorkYears]
      ,[Abroad]
      ,[CurrentPayType]
      ,[CurrentPayCurrency]
      ,[CurrentPay]
      ,[WishJobProperty]
      ,[WishTrade]
      ,[WishJob]            期望工作
      ,[WishWorkPlace]
      ,[wishWorkCourt]
      ,[wishWorkDiqu]
      ,[WishPayType]
      ,[WishPayCurrency]
      ,[WishPay]
      ,[WishConsult]
      ,[OnJobType]
      ,[OnJobDate]
      ,[Require]
      ,[StateBasic]
      ,[StateEducate]
      ,[StateAppraise]
      ,[StateWishJob]
      ,[StateWork]
      ,[StateLanguage]
      ,[StateTrain]
      ,[StateSkill]
      ,[StateIt]
      ,[StateItem]
      ,[StateCert]
      ,[StateAddons]
      ,[ResumeLevel]
      ,[enResume]
      ,[enAppraise]
      ,[enWorkObject]
      ,[enSkillDesc]
      ,[enSkillKeep]
      ,[enCurrentTrade]
      ,[enCurrentJobType]
      ,[enCurrentJob]
      ,[enCurrentJobLevel]
      ,[enWorkYears]
      ,[enAbroad]
      ,[enCurrentPayType]
      ,[enCurrentPayCurrency]
      ,[enCurrentPay]
      ,[enWishJobProperty]
      ,[enWishTrade]
      ,[enWishJob]
      ,[enWishWorkPlace]
      ,[enWishPayType]
      ,[enWishPayCurrency]
      ,[enWishPay]
      ,[enWishConsult]
      ,[enOnJobType]
      ,[enOnJobDate]
      ,[enRequire]
      ,[enStateBasic]
      ,[enStateWishJob]
      ,[enStateAppraise]
      ,[enStateEducate]
      ,[enStateWork]
      ,[enStateLanguage]
      ,[enStateTrain]
      ,[enStateSkill]
      ,[enStateIT]
      ,[enStateItem]
      ,[enStateCert]
      ,[enStateAddons]
      ,[enResumeLevel]
      ,[TemplateID]
      ,[Flag]
      ,[CreateDate]
      ,[UpdateDate]
      ,[Degree]
      ,[ResumeDoc]
      ,[Device]
  FROM [zptong].[dbo].[bst_Person_Resume]    简历表

SELECT TOP 1000 [JID]  编号
      ,[Parentid]     表示级别
      ,[cnJobName]
      ,[enJobName]
      ,[Orderid]
      ,[OldJid]
      ,[PjobName]
  FROM [zptong].[dbo].[bst_System_JobType]  工作类型表

我是这样写的:
select DISTINCT case when Sex='0' then '女' when Sex='1' then '男'end as Sex,Realname,
 WishJob,c.期望职业,contactway1,CreateDate from bst_Person_Basic as a inner join 
  bst_Person_Resume  as b on a.Perid=b.Perid 
 inner join (select a.JID as a,a.cnJobName as aa,b.JID as b,b.cnJobName as bb,
 cast(a.JID as varchar)+'-'+CAST(b.JID as varchar)+'|' as '期望职业编号',
cast(a.cnJobName+'-'+b.cnJobName as varchar) as '期望职业'   from bst_System_JobType as a 
left join bst_System_JobType as b  on a.JID=b.Parentid) as c on b.WishJob= c.期望职业编号
 where c.期望职业 like '%房产%' or c.期望职业 like '%建筑%' or c.期望职业 like '%酒店%' or c.期望职业 like '%物业%' 
 or c.期望职业 like '%园林绿化%' or c.期望职业 like '%装饰建材%' 
   order by CreateDate desc

先进行左连接,查出职位小类所对应的大类结果如下:
a aa b bb 期望职业编号 期望职业
1000 不限 NULL NULL NULL NULL
1001 计算机硬件 1101 高级硬件工程师 1001-1101| 计算机硬件-高级硬件工程师
1001 计算机硬件 1103 其他职位 1001-1103| 计算机硬件-其他职位
1001 计算机硬件 1102 硬件工程师 1001-1102| 计算机硬件-硬件工程师
1002 计算机软件 1109 ERP技术开发(ORACLE/SAP) 1002-1109| 计算机软件-ERP技术开发(ORACLE/
1002 计算机软件 1108 ERP实施顾问(ORACLE/SAP) 1002-1108| 计算机软件-ERP实施顾问(ORACLE/
1002 计算机软件 1800 SEO工程师 1002-1800| 计算机软件-SEO工程师
1002 计算机软件 1803 程序员 1002-1803| 计算机软件-程序员
1002 计算机软件 1107 仿真应用工程师 1002-1107| 计算机软件-仿真应用工程师
1002 计算机软件 1104 高级软件工程师 1002-1104| 计算机软件-高级软件工程师
1002 计算机软件 1116 计算机辅助设计工程师 1002-1116| 计算机软件-计算机辅助设计工程
1002 计算机软件 1117 其他职位 1002-1117| 计算机软件-其他职位
1002 计算机软件 1106 软件UI设计师/工程师 1002-1106| 计算机软件-软件UI设计师/工程师
1002 计算机软件 1105 软件工程师 1002-1105| 计算机软件-软件工程师
1002 计算机软件 1115 数据库工程师/管理员 1002-1115| 计算机软件-数据库工程师/管理员
1002 计算机软件 1112 系统分析员 1002-1112| 计算机软件-系统分析员
1002 计算机软件 1113 系统工程师 1002-1113| 计算机软件-系统工程师
1002 计算机软件 1111 系统集成工程师 1002-1111| 计算机软件-系统集成工程师
1002 计算机软件 1114 系统架构设计师 1002-1114| 计算机软件-系统架构设计师
1002 计算机软件 1792 信息主管CIO 1002-1792| 计算机软件-信息主管CIO
1002 计算机软件 1110 需求工程师 1002-1110| 计算机软件-需求工程师
1003 互联网开发及应用 1123 UI设计师/顾问 1003-1123| 互联网开发及应用-UI设计师/顾问
1003 互联网开发及应用 1120 多媒体/游戏开发工程师 1003-1120| 互联网开发及应用-多媒体/游戏开
1003 互联网开发及应用 1118 互联网软件开发工程师 1003-1118| 互联网开发及应用-互联网软件开
1003 互联网开发及应用 1132 其他职位 1003-1132| 互联网开发及应用-其他职位
1003 互联网开发及应用 1780 网络工程 1003-1780| 互联网开发及应用-网络工程
1003 互联网开发及应用 1122 网络工程师 1003-1122| 互联网开发及应用-网络工程师
1004 IT-管理 1134 技术总监/经理 1004-1134| IT-管理-技术总监/经理
1004 IT-管理 1141 其他职位 1004-1141| IT-管理-其他职位
1004 IT-管理 1133 首席技术执行官CTO/首席信息官CIO 1004-1133| IT-管理-首席技术执行官CTO/首席
1004 IT-管理 1138 项目经理 1004-1138| IT-管理-项目经理
1004 IT-管理 1140 项目执行/协调人员 1004-1140| IT-管理-项目执行/协调人员
1004 IT-管理 1139 项目主管 1004-1139| IT-管理-项目主管
1004 IT-管理 1137 项目总监 1004-1137| IT-管理-项目总监
1004 IT-管理 1135 信息技术经理/主管 1004-1135| IT-管理-信息技术经理/主管
1004 IT-管理 1136 信息技术专员 1004-1136| IT-管理-信息技术专员
1005 IT-品管/技术支持 1145 标准化工程师 1005-1145| IT-品管/技术支持-标准化工程师
1005 IT-品管/技术支持 1150 测试员 1005-1150| IT-品管/技术支持-测试员
1005 IT-品管/技术支持 1144 计量工程师 1005-1144| IT-品管/技术支持-计量工程师
1005 IT-品管/技术支持 1151 技术文员/助理 1005-1151| IT-品管/技术支持-技术文员/助理
1005 IT-品管/技术支持 1143 技术支持工程师 1005-1143| IT-品管/技术支持-技术支持工程
1005 IT-品管/技术支持 1142 技术支持经理 1005-1142| IT-品管/技术支持-技术支持经理
1005 IT-品管/技术支持 1146 品质经理 1005-1146| IT-品管/技术支持-品质经理
1005 IT-品管/技术支持 1152 其他职位 1005-1152| IT-品管/技术支持-其他职位
1005 IT-品管/技术支持 1148 软件测试 1005-1148| IT-品管/技术支持-软件测试
1005 IT-品管/技术支持 1147 系统测试 1005-1147| IT-品管/技术支持-系统测试
1005 IT-品管/技术支持 1149 硬件测试 1005-1149| IT-品管/技术支持-硬件测试
1006 通信技术 1156 电信交换工程师 1006-1156| 通信技术-电信交换工程师
1006 通信技术 1159 电信网络工程师 1006-1159| 通信技术-电信网络工程师
1006 通信技术 1162 其他职位 1006-1162| 通信技术-其他职位
1006 通信技术 1157 数据通信工程师 1006-1157| 通信技术-数据通信工程师
1006 通信技术 1160 通信电源工程师 1006-1160| 通信技术-通信电源工程师
1006 通信技术 1153 通信技术工程师 1006-1153| 通信技术-通信技术工程师
1006 通信技术 1155 无线通信工程师 1006-1155| 通信技术-无线通信工程师
1006 通信技术 1158 移动通信工程师 1006-1158| 通信技术-移动通信工程师
1006 通信技术 1154 有线传输工程师 1006-1154| 通信技术-有线传输工程师
1006 通信技术 1161 增值产品开发工程师 1006-1161| 通信技术-增值产品开发工程师


然后跟简历表进行了连接,本身两表没有对应字段我就让期望职位等于我查出来的结果中的期望职业编号了,这样就有问题了,简历表的期望职业并不是只有一个例 如我的期望职业是1006-1159|1006-1156|像这样两个及其以上的就查不出来,因为之前连接的时候写死了期望职业等于期望职业编号例如 1006-1155|像这样的数据才能查出来这样数据就不完整了。。。

执行刚开始的语句结果:
Sex Realname WishJob 期望职业 contactway1 CreateDate
男 湛先兵 1034-1544| 建筑工程-施工员 18229916891 2014-12-03 16:57:34.950
男 陈斌 1034-1544| 建筑工程-施工员 15886307862 2014-12-02 11:23:38.797
男 王希 1034-1544| 建筑工程-施工员 18890495173 2014-12-02 11:10:23.920
男 彭曙明 1034-1528| 建筑工程-建筑工程师 13307318128 2014-11-24 13:48:31.967
男 刘海燕 1034-1530| 建筑工程-公路/桥梁/港口/隧道工 15573142239 2014-11-22 21:06:56.077
女 王智虹 1034-1529| 建筑工程-结构/土木/土建工程师 15974246540 2014-11-19 14:08:43.467
男 唐博 1034-1535| 建筑工程-城市规划与设计 18874613107 2014-11-19 13:55:10.670
女 黎佳玉 1034-1535| 建筑工程-城市规划与设计 17708445703 2014-11-14 11:04:28.310
男 石川 1034-1535| 建筑工程-城市规划与设计 15116263644 2014-11-14 10:44:01.543
男 王江 1034-1544| 建筑工程-施工员 15580061062 2014-11-13 09:06:28.217
女 陈静瑶 1034-1537| 建筑工程-园艺/园林/景观设计 13677310915 2014-11-12 15:51:52.560
女 林元辉 1034-1535| 建筑工程-城市规划与设计 15773127113 2014-11-12 14:57:08.170
男 侯政 1034-1535| 建筑工程-城市规划与设计 14786537440 2014-11-12 14:46:29.840

除了上述问题结果还是准确的
然后我加上了createdate>='2014/01/01'跟 (a.ContactWay1 is not null) or a.ContactWay1<>‘’就是要日期大于等于2014/01 /01contactWay1不是null不为空的数据,代码如下:
select DISTINCT case when Sex='0' then '女' when Sex='1' then '男'end as Sex,Realname,
 WishJob,c.期望职业,contactway1,CreateDate from bst_Person_Basic as a inner join 
  bst_Person_Resume  as b on a.Perid=b.Perid 
 inner join (select a.JID as a,a.cnJobName as aa,b.JID as b,b.cnJobName as bb,
 cast(a.JID as varchar)+'-'+CAST(b.JID as varchar)+'|' as '期望职业编号',
cast(a.cnJobName+'-'+b.cnJobName as varchar) as '期望职业'   from bst_System_JobType as a 
left join bst_System_JobType as b  on a.JID=b.Parentid) as c on b.WishJob= c.期望职业编号
 where c.期望职业 like '%房产%' or c.期望职业 like '%建筑%' or c.期望职业 like '%酒店%' or c.期望职业 like '%物业%' 
 or c.期望职业 like '%园林绿化%' or c.期望职业 like '%装饰建材%' 
   and CreateDate >='2014/01/01' and (a.ContactWay1 is not null) or a.ContactWay1<>''
运行结果:
Sex Realname WishJob 期望职业 contactway1 CreateDate
男 sdsd 1007-1170| 电子/电器/半导体/仪器仪表-电气 13754865545 2010-07-15 14:15:52.890
男 summer 1030-1791| 市场/营销-网络营销 13746735185 2011-03-09 14:49:21.547
男 xia 1045-1635| 酒店/旅游-楼面经理 13976861869 2012-02-03 18:53:10.310
男 xiao 1030-1475| 市场/营销-市场/营销/拓展总监 15874074789 2013-05-08 14:06:20.010
男 yangwei 1020-1348| 技工/普工-车工/磨工/铣工/冲压 15074049480 2012-07-19 17:33:45.047
男 Z胡俊 1029-1474| 公关/媒介-其他职位 15273861501 2010-04-14 08:09:24.340
男 啊啊 1002-1104| 计算机软件-高级软件工程师 13873236654 2014-12-23 11:43:53.530
男 啊啊 1002-1106| 计算机软件-软件UI设计师/工程师 15848484848 2014-12-12 18:36:01.253
男 啊啊 1002-1106| 计算机软件-软件UI设计师/工程师 18673290687 2014-08-20 14:33:47.840
男 艾磊 1034-1533| 建筑工程-给排水/暖通工程 NULL 2009-11-24 20:22:35.000
它查的是所有期望职业只有一个的数据,条件一个都没照着来
我知道可以用后台写,但是我现在需要查出结果导到excel表格里去,有没有办法可以实现:期望职业根据编号显示为中文并且期望职业名称包含房产,建筑, 酒店,物业,园林绿化或者装饰建材并且createdate在2014/01/01以后并且ContactWay1不为null或者空

柒柒。的主页 柒柒。 | 初学一级 | 园豆:78
提问于:2016-05-24 14:58
< >
分享
最佳答案
0

。。。这么多,使用左外连接,职位所在表作为左表

 

收获园豆:60
小光 | 小虾三级 |园豆:1862 | 2016-05-24 15:35

在哪里使用左外连接?职位所在表按照我的方法只能是查出只有一个wishjob的你有没有办法可以把那些有两个的三个的四个的五个的都查出来啊

柒柒。 | 园豆:78 (初学一级) | 2016-05-24 15:45

@柒柒。: 左外连接:LEFT  JOIN或LEFT OUTER JOIN     
左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。  

 这个会把左表中所有能匹配到的数据全部显示出来

小光 | 园豆:1862 (小虾三级) | 2016-05-24 15:54

@小光: select DISTINCT case when Sex='0' then '女' when Sex='1' then '男'end as Sex,Realname,
 WishJob,c.期望职业,contactway1,CreateDate from bst_Person_Resume  as b left  join (select a.JID as a,a.cnJobName as aa,b.JID as b,b.cnJobName as bb,
 cast(a.JID as varchar)+'-'+CAST(b.JID as varchar)+'|' as '期望职业编号',
cast(a.cnJobName+'-'+b.cnJobName as varchar) as '期望职业'   from bst_System_JobType as a
inner join bst_System_JobType as b  on a.JID=b.Parentid) as c  on b.WishJob= c.期望职业编号 left join
  bst_Person_Basic as a on a.Perid=b.Perid
 where CreateDate>='2014/01/01' and  c.期望职业 like '%房产%' or c.期望职业 like '%建筑%' or c.期望职业 like '%酒店%' or c.期望职业 like '%物业%'
 or c.期望职业 like '%园林绿化%' or c.期望职业 like '%装饰建材%'
   order by CreateDate desc

没什么不同啊   我是理解错了什么。。。

柒柒。 | 园豆:78 (初学一级) | 2016-05-24 16:11

@柒柒。:只需要在编号表和职位表链接的时候进行左外连接就行啦,左外连接中左表是left join后面的表

假设id是编号在a表中,job是工作在b表中

select id,job from a left join b where a.id = b.jid

我大致看了你的sql,太乱了,好几个左链接,貌似是你把左表写成编号所在的表了,你就按照上面的原理写

小光 | 园豆:1862 (小虾三级) | 2016-05-24 16:19

@柒柒。: 怎么写这么多左链接

select 编号,职位 from 编号表 left join 职位表

你貌似写反了,就按照上面这个原理写,left join后面才是左表

小光 | 园豆:1862 (小虾三级) | 2016-05-24 16:21

@小光: 木写反,wishjob是在bst_Person_Resume表里面,职位的中文名称在select a.JID as a,a.cnJobName as aa,b.JID as b,b.cnJobName as bb,
 cast(a.JID as varchar)+'-'+CAST(b.JID as varchar)+'|' as '期望职业编号',
cast(a.cnJobName+'-'+b.cnJobName as varchar) as '期望职业'   from bst_System_JobType as a
inner join bst_System_JobType as b  on a.JID=b.Parentid    查出的结果里面啊。。。

 

柒柒。 | 园豆:78 (初学一级) | 2016-05-24 16:32

@小光: 我也不想这么,我只能想到这么乱的方法。。。

柒柒。 | 园豆:78 (初学一级) | 2016-05-24 16:33

@柒柒。: select 编号,职位 from 编号表 left join 职位表 where 职位表.编号=编号表.编号

你那个好乱啊

小光 | 园豆:1862 (小虾三级) | 2016-05-24 16:40

@柒柒。: 如果两个表不能用这个链接,你可以用他们对应的进行链接呀

小光 | 园豆:1862 (小虾三级) | 2016-05-24 16:41

@小光: 就是没有其他对应的表了啊

柒柒。 | 园豆:78 (初学一级) | 2016-05-24 16:42

@柒柒。: 这两个表根据什么关联你就用什么关联

select 编号,职位 from 编号表 left join 职位表 where 职位表.编号=编号表.编号

这样就出来了

小光 | 园豆:1862 (小虾三级) | 2016-05-24 16:43

@小光: 两个表并没有关联字段    我写的这个查询语句可以查出来wishjob只有一个的   可以对应上  我现在的问题是where后面接其他的条件写的查询语句就不成立了   还有就是wishjob只有一个数据没查完整那些有两个三个四个五个的数据就没查出来

柒柒。 | 园豆:78 (初学一级) | 2016-05-24 16:48

@柒柒。: ==没有关联字段

小光 | 园豆:1862 (小虾三级) | 2016-05-24 16:49

@小光: 真没有    我给你看。。。

柒柒。 | 园豆:78 (初学一级) | 2016-05-24 16:50

@小光: 我把表以及表字段还有SQL 语句跟运行的结果都有贴出来呀

柒柒。 | 园豆:78 (初学一级) | 2016-05-24 17:14

@柒柒。: 两个表肯定有哪一列对应,没外键不代表没对应关系,肯定某一列对应,一个leftjoin就完了。。。我还有任务

小光 | 园豆:1862 (小虾三级) | 2016-05-24 17:18

@小光: 而且这么多列,我也不知道都是干嘛用的,给我也没用。。

小光 | 园豆:1862 (小虾三级) | 2016-05-24 17:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册