3张关联表得比较问题?

ywduan 2003-10-20 12:55:50
现有3张表,表1,表2内容大都相同,现在想以KSH为纽带,把ZYDM列值不同得显示出来。表1中得ZYDM与表3没有关系,表2中ZYDM对应得代码表是表3。我想在比较得时候将表2中得ZYDM替换成表3中对应得MC,然后与表1比较,构造得sql语句如下
Select old.* from old join new on new.KSH = old.KSH where
SUBSTRING(old.ZYDM,1,2)<> SUBSTRING((select distinct 表3.MC from 表3,new where new.ZYDM=表3.ZYDM),1,2)
运行得时候发现SUBSTRING中得select语句返回得是一批记录没法比较。
请问应该如果构造这个sql语句呢?


表1:old
KSH ZYDM
001 计算机应用
002 情报学
表2:new
KSH ZYDM
001 02
002 08
表三:Code
ZYDM MC
01 哲学
02 文学
08 情报学
...全文
33 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
txlicenhe 2003-10-20
  • 打赏
  • 举报
回复
蹭分。
leus 2003-10-20
  • 打赏
  • 举报
回复
select * from old where not exists(select * from (select a.ksh,b.mc from new a left join Code b on a.ZYDM=b.ZYDM) tem where ksh=old.ksh and left(mc,2)=left(old.zydm,2))
ywduan 2003-10-20
  • 打赏
  • 举报
回复
非常谢谢 pengdali(大力 V3.0). welyngj(平平淡淡)
待会我好好实践一下再结帐
太累了 困了

pengdali(大力 V3.0)你可真热心,每次都是一有问题马上就能见到您得回答 谢谢
pengdali 2003-10-20
  • 打赏
  • 举报
回复
我改成了left(xx,2)这样等于substring(xx,1,2)
welyngj 2003-10-20
  • 打赏
  • 举报
回复
declare @old int,@new int
select @old=count(*) from old
select @new=count(*) from old inner join (select ksh ,mc from new left join code on new.zydm=code.zydm) b
on old.ksh=b.ksh and old.zydm=b.mc
if(@old=@new)
print '相同'
else print '不相同'
ywduan 2003-10-20
  • 打赏
  • 举报
回复
谢谢 pengdali(大力 V3.0) 这么快就帮忙
我在试验一下您提供得语句 好复杂啊 :) 又得半天学习了

用substr是因为表1中ZYMC与表3中得专业名称不完全相同,如果选择精确匹配比较得话则表1中得大部分都不会相同,现在我想简化一下,只比较ZYMC得前几个字符。
pengdali 2003-10-20
  • 打赏
  • 举报
回复
不知道你为什么要substr,如果不要:

select * from old where not exists(select 1 from (select a.ksh,b.mc from new a left join Code b on a.ZYDM=b.ZYDM) tem where ksh=old.ksh and mc=old.zydm)
pengdali 2003-10-20
  • 打赏
  • 举报
回复
select * from old where not exists(select 1 from (select a.ksh,b.mc from new a left join Code b on a.ZYDM=b.ZYDM) tem where ksh=old.ksh and left(mc,2)=left(old.zydm,2))

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧