首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SqlServer选择位置

SqlServer选择位置
EN

Stack Overflow用户
提问于 2014-04-03 15:13:06
回答 5查看 108关注 0票数 0

我被抛出了这个循环,我想知道我是否不完全理解在使用中的选择,或者我刚刚在这段代码中做了一个错误:

代码语言:javascript
运行
复制
DECLARE @driver TABLE (ID INT)
INSERT INTO @driver select eventid from event where event_code_name IS NULL
select eventid from event where eventid in (select eventid from @driver)

事件表中共有3137条记录。有458条记录的event_code_name字段为null。在上面的select中,我期望得到458,但是我得到的是所有的事件记录。

我错过了什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-04-03 15:15:19

我认为(select eventid from @driver)应该是(select id from @driver)

票数 3
EN

Stack Overflow用户

发布于 2014-04-03 15:33:25

由于您使用的是两个表,一个是虚拟表,一个是物理表,所以解决方案是使用INNER JOIN子句:

代码语言:javascript
运行
复制
DECLARE @driver TABLE (ID INT)
INSERT INTO @driver SELECT eventid FROM event WHERE event_code_name IS NULL
SELECT eventid FROM event INNER JOIN @driver ON id = event.eventid

通过这种方式,您只能获得事件表和@driver表中同时存在的in。

INNER JOIN也比使用IN (SELECT ...)更有效

如果不使用@driver表,就可以使用INSERT语句中使用的SELECT查询获得相同的结果:

代码语言:javascript
运行
复制
SELECT eventid FROM event WHERE event_code_name IS NULL
票数 1
EN

Stack Overflow用户

发布于 2014-04-03 15:15:29

你是不是错过了一个独特的?

从事件中的事件中选择不同的事件in (从@驱动程序中选择事件in)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22841845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档