with as 语句的写法问题

cycg5696 2017-03-24 06:48:01
我想实现:
假如 我本来是:
第一步,要从 类型表中,搜出 alid 值

select alid from TypeList where pinyin like '%hanguan%'

假如,搜索结果为:alid =1,3,6,20

第二步 ,再根据 前面的 alid值 1,3,6,20,在 产品表中 搜索出 该类 产品

SELECT * FROM productlist where alid in (1,3,6,20)


现在的问题是:为了提升搜索速度,我想通过 with as 语句 一步到位。不知道应该怎么写啊

with yyyyyy
as
(select alid from TypeList where pinyin like '%hanguan%'
)

SELECT *
FROM productlist
where alid in (yyyyyy)


恳请高手 不吝赐教!!!
...全文
215 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cycg5696 2017-03-25
  • 打赏
  • 举报
回复
谢谢各位高手 啦!!!
道素 2017-03-25
  • 打赏
  • 举报
回复
也可以这样试试

select  *  from  productlist as pl INNER JOIN TypeList as tl on tl.alid=pl.alid
where t1.pinyin like '%hanguan%' 
cycg5696 2017-03-24
  • 打赏
  • 举报
回复
我这样做,从理论上说,能不能提升速度啊? 我是想着:产品表productlist 记录数 上百万条信息,如果用
select  *  from  productlist     where  pinming like '%hanguan%' 
速度太慢了。 但是, 类型表typelist 行数较少,可以用:like 模糊查询 出:alid;
select   alid   from  typelist     where  pinyin  like '%hanguan%' 
alid 完全是 数值型int 的,并且,在产品表productlist中,每条产品信息,都有对应的 alid。所以,就用
 select  * from  productlist.  where  alid  in  (yyyyy)
期望提升 查询速度。我的思路正确吗?
cycg5696 2017-03-24
  • 打赏
  • 举报
回复
二月十六 2017-03-24
  • 打赏
  • 举报
回复
SELECT  *
FROM productlist
WHERE alid IN ( SELECT alid
FROM TypeList
WHERE pinyin LIKE '%hanguan%' );
吉普赛的歌 2017-03-24
  • 打赏
  • 举报
回复
#2的写法是对的。 不过如果你的 pinyin这个表的数据量很大, 这样还是会慢。
  • 打赏
  • 举报
回复

with  yyyyyy 
as
(select alid  from TypeList  where pinyin like '%hanguan%' 
)
SELECT * FROM  productlist T2
where EXISTS(SELECT 1 FROM yyyyyy T1 WHERE T1.alid =T2.alid )

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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