双条件联合查询

ccp5780199 2008-07-11 10:18:18
修改一套系统 因本身系统数据库设计存在缺陷。。

我的问题是
如何把如下SQL语句简化?
select * from view_UserPager where UserID in (select userid from score) and PaPerID in (select paperid from score)

2个条件当同时存在这样写就可以

但可能存在score表里PaPerID 有,但UserID 没有的情况
select * from view_UserPager where UserID not in (select userid from score) and PaPerID not in (select paperid from score)

因本身不能对数据库进行改动
不知道该怎么做。。


...全文
135 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
张自强153 2008-07-11
  • 打赏
  • 举报
回复
以下两个语句的结果是一样的:

select *
from view_UserPager
where UserID in (select userid from score) and PaPerID in (select paperid from score)

select a.*
from view_UserPager a,score b
where a.UserID=b.UserID and a.PaPerID=b.PaPerID
ccp5780199 2008-07-11
  • 打赏
  • 举报
回复
本来是以对多对多对多的关系
可是偏偏设计成只有4张表,设计上的缺陷,但本身存在数据又不能进行改动
不知道有什么好办法

貌似select * from view_UserPager where ltrim(UserID)+'@^#%#*'+ltrim(PaPerID) not in (select ltrim(UserID)+'@^#%#*'+ltrim(PaPerID) from score)

这句就可以实现了
ccp5780199 2008-07-11
  • 打赏
  • 举报
回复
select * from view_UserPager where UserID in (select userid from score) and PaPerID in (select paperid from score)
这个情况是可以
但反之就不行了

就比如score存在如下数据

UserID PaperID
--------- --------
fn0402-1 2


另一张view_UserPager 存在如下数据

UserID PaperID
----------------- -----------
1 2
fn0402-1 2

那么想获取所有在score中不存在的view_UserPager 的数据
popule_daisy 2008-07-11
  • 打赏
  • 举报
回复
"但可能存在score表里PaPerID 有,但UserID 没有的情况"
这样就不满足and条件啦

楼主要实现什么的效果咯
下面这样的?
select * from view_UserPager a 
left join score b on a.userid=b.userid
left join score c on a.paperid=c.paperid
hery2002 2008-07-11
  • 打赏
  • 举报
回复
select * from view_UserPager where UserID in (select userid from score) and PaPerID in (select paperid from score) 

以上这句就包含了你说的这两种情况了.
2个条件当同时存在这样写就可以 
但可能存在score表里PaPerID 有,但UserID 没有的情况
hery2002 2008-07-11
  • 打赏
  • 举报
回复
2楼不对,
限制了条件的,
没有看清楚LZ的要求.
貌似没有什么可以优化的.
hery2002 2008-07-11
  • 打赏
  • 举报
回复
LZ的签名 :)
nzperfect 2008-07-11
  • 打赏
  • 举报
回复
select * from view_UserPager where UserID in (select userid from score) and PaPerID in (select paperid from score)

这样写就可以。
view_UserPager是个视图吧
hery2002 2008-07-11
  • 打赏
  • 举报
回复
select * from view_UserPager where ltrim(UserID)+'@^#%#*'+ltrim(PaPerID) in (select ltrim(UserID)+'@^#%#*'+ltrim(PaPerID) from score) 

select * from view_UserPager where ltrim(UserID)+'@^#%#*'+ltrim(PaPerID) not in (select ltrim(UserID)+'@^#%#*'+ltrim(PaPerID) from score)
nzperfect 2008-07-11
  • 打赏
  • 举报
回复
看不太明白要问啥~

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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