• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

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 情报学
...全文
5 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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))
回复
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-10-20 12:55
社区公告
暂无公告