在线等!求高效SQL语句(sql查询a表的a1字段在b表查询结果里,b表b1字段在c表查询结果)

cyancrystal 2010-12-08 09:25:11
SQL 语句示例如下:
select * from A where left(A.发货,1)>1 And A.系统ID号 in (select 系统ID号 from B where 商品id in (select 商品ID from C where C.产品id=1 And A.加入时间<DATEADD(year,1,C.加入时间)))


功能是通过上面的语句实现了,但效率很低,查询一次需要花费接近1分钟,ABC表的大小都是1-2万条左右的数据,请问如何书写SQL语句能实现高效的查询呢?


谢谢!
...全文
238 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 cyancrystal 的回复:]
SQL 语句示例如下:
select * from A where left(A.发货,1)>1 And A.系统ID号 in (select 系统ID号 from B where 商品id in (select 商品ID from C where C.产品id=1 And A.加入时间<DATEADD(year,1,C.加入时间)))


功能是通过上面的语句实现了,但效率很低,查询一次……
[/Quote]

select a.* from a , b, c
where left(A.发货,1)>1 and a.系统ID号 = b.系统ID号 and b.商品id = c.商品id and C.产品id=1 And A.加入时间 < DATEADD(year,1,C.加入时间)
cyancrystal 2010-12-09
  • 打赏
  • 举报
回复
楼上的这位兄弟,执行后发现很多重复的数据啊,如何处理?
yyfhz 2010-12-09
  • 打赏
  • 举报
回复

select * from A where
left(a1.发货,1)>1 And -- 如果 系统ID号 是A的唯一键,则这句话可以省略
A.系统ID号 in (
Select distinct a1.系统ID号 From A a1, B, C where
left(a1.发货,1)>1 and C.产品id=1 and a1.系统ID号=B.系统ID号 and B.商品id=C.商品id and
a1.加入时间<DATEADD(year,1,C.加入时间)
)

「已注销」 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cyancrystal 的回复:]

1楼的兄弟,你的这个语句也很慢哦,我刚刚试过了
[/Quote]
选中sql,Ctrl + L 查看执行计划,如果有table csan的表,给相关字段加上Index就可以了。
cyancrystal 2010-12-08
  • 打赏
  • 举报
回复
2楼的兄弟我试了下你的语句速度快很多但是结果不正确啊,麻烦再重新看看!
cyancrystal 2010-12-08
  • 打赏
  • 举报
回复
1楼的兄弟,你的这个语句也很慢哦,我刚刚试过了
cyancrystal 2010-12-08
  • 打赏
  • 举报
回复
2楼的请问A,B的系统ID号都是标识字段还需要建立索引吗?
飘零一叶 2010-12-08
  • 打赏
  • 举报
回复
SELECT A.* FROM A JOIN B ON A.系统ID号=B.系统ID号 JOIN C ON B.商品id=C.商品id
WHERE left(A.发货,1)>1 AND C.产品id=1 And A.加入时间<DATEADD(year,1,C.加入时间)
--在A,B的系统ID号,B,C的商品id上建立索引
「已注销」 2010-12-08
  • 打赏
  • 举报
回复
try~~~~
select a.* from A a
left join B b on A.系统ID号=b.系统ID号
left join C c on c.商品ID=b.商品ID and c.产品id=1 And a.加入时间<DATEADD(year,1,c.加入时间)
where left(a.发货,1)>1

22,209

社区成员

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

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