case when 语句与exists 怎么一同使用?

以下语句为什么用了exists会报语法错误?(之前用in的,考虑到性能我改用exists就报错了)SELECT(CASEWHENChannelIDexists(SELEC... 以下语句 为什么用了exists会报语法错误?(之前用in 的,考虑到性能我改用exists就报错了)
SELECT (CASE WHEN ChannelID exists (SELECT ChannelID FROM dbo.BASChannel WHERE LEVEL=1) THEN ChannelID ELSE (SELECT ParantID FROM dbo.BASChannel WHERE ChannelID=A.ChannelID) END ) ChannelID FROM dbo.DATMdApplyList A
展开
 我来答
hit_lubin
2011-08-04 · TA获得超过7889个赞
知道大有可为答主
回答量:1554
采纳率:100%
帮助的人:2024万
展开全部
exists和in用法一般可以互换,但是是有不同的,in里面是一个集合,所以 channelid in (集合),是一个判断的表达式,而使用exists,返回的并不是集合,而是把in用法之前的变量,传入到子查询后边的where条件中去,和exists合在一起返回true或者false的结果,如果条件符合,返回true,否则返回false。所以你使用exists就错了,需要把channelid传入到条件里面去。

SELECT (CASE WHEN exists (SELECT 1 FROM dbo.BASChannel WHERE LEVEL=1 and dbo.baschannel.channelid = a.ChannelID) THEN ChannelID ELSE (SELECT ParantID FROM dbo.BASChannel WHERE ChannelID=A.ChannelID) END ) ChannelID FROM dbo.DATMdApplyList A

简单的用法比如:
selelct user_id, user_name
from tb_users
where user_id in (select user_id from tb_course)
这个查询是查询在tb_course表中存在的user记录。
使用exists,写成
select user_id, user_name
from tb_users
where exists (select 1 from tb_course where tb_course.user_id = tb_users.user_id)
exists用法是把主查询中的字段传入到子查询中去。如果有符合的条件,会停止全表检索,返回TRUE。所以效率才要高于IN,IN是要进行完全表检索得到集合才会结束执行。而EXISTS遇到符合的 条件,就会停止执行子查询。
慎重还可靠灬宝贝f
2015-11-04 · TA获得超过12.9万个赞
知道大有可为答主
回答量:1.9万
采纳率:52%
帮助的人:2635万
展开全部
  简单的用法比如:
selelct user_id, user_name
from tb_users
where user_id in (select user_id from tb_course)
这个查询是查询在tb_course表中存在的user记录。
使用exists,写成
select user_id, user_name
from tb_users
where exists (select 1 from tb_course where tb_course.user_id = tb_users.user_id)
exists用法是把主查询中的字段传入到子查询中去。如果有符合的条件,会停止全表检索,返回TRUE。所以效率才要高于IN,IN是要进行完全表检索得到集合才会结束执行。而EXISTS遇到符合的 条件,就会停止执行子查询。

  SELECT (CASE WHEN MASTERJOB = '' THEN JOBNO ELSE MASTERJOB END)WO,JOBNO,CHILDJOB,CODE,BDESC,P_CODE,
(SELECT TOP 1 BDESC FROM PRO WHERE CODE=RESVT.P_CODE)CBDESC,QTY,UNIT,LOC,
(CASE WHEN exists(SELECT top 1 TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE=RESVT.CODE AND A.WO like @gd AND B.TAXUP > 0 )
THEN
(SELECT top 1 TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE=RESVT.CODE AND B.TAXUP > 0 ) --AND charindex(@gd,WO)>0
WHEN exists(
SELECT TOP 1 B.TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE=RESVT.CODE AND B.TAXUP > 0 order by B.[DATETIME] desc )
THEN
(SELECT TOP 1 B.TAXUP
FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)
WHERE B.CODE=RESVT.CODE AND B.TAXUP > 0 order by B.[DATETIME] DESC)
ELSE
(select TOP 1 TAXUP from VQUT WHERE VQUT.CODE=RESVT.CODE order by [DATETIME] DESC)
END)DJ,
(CASE WHEN CHILDJOB='' THEN JOBNO ELSE CHILDJOB END)W,
(SELECT TOP 1 SUM(QTY) FROM MRT WHERE JOBNO=RESVT.JOBNO AND CODE=RESVT.CODE AND P_CODE=RESVT.P_CODE)T,
(SELECT TOP 1 SUM(QTY) FROM MRT WHERE JOBNO=RESVT.JOBNO AND CODE=RESVT.CODE AND P_CODE=RESVT.P_CODE AND MRNO LIKE '%HCBL%' )BL,
(select TOP 1 SUM(BADQTY+PBADQTY+RETUQTY) from PRT Left JOIN PRTUDF ON PRT.PRNO=PRTUDF.PRNO AND PRT.ITEMNO=PRTUDF.ITEMNO WHERE JOBNO=RESVT.JOBNO AND CODE=RESVT.CODE AND P_CODE=RESVT.P_CODE)TL,
(SELECT TOP 1 VEN FROM ANT B LEFT JOIN ANTUDF A ON (B.PANNO=A.PANNO and B.ITEMNO=A.ITEMNO)WHERE B.CODE=RESVT.CODE AND A.WO like @gd )VEN,
(SELECT TOP 1 qty_nee from #tree where #tree.code=RESVT.CODE AND #tree.p_code=RESVT.P_CODE)QTY_NEE,
(SELECT TOP 1 sh from #tree where #tree.code=RESVT.CODE AND #tree.p_code=RESVT.P_CODE)SH
FROM RESVT WHERE 1=1 and (CASE WHEN MASTERJOB = '' THEN JOBNO ELSE MASTERJOB END
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7d3459038
2011-08-05 · 超过15用户采纳过TA的回答
知道答主
回答量:132
采纳率:0%
帮助的人:62.3万
展开全部
exists 是返回一个存在与否的判断,in 才是返回记录集
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Finish1983
2011-08-04 · TA获得超过762个赞
知道小有建树答主
回答量:1477
采纳率:100%
帮助的人:394万
展开全部
exists 换成 in 尝试下
追问
之前我就是用in的,没问题,但是用in要遍历表, 性能不好,我现在想用exist试一下,不知道为什么会报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式