我被抛出了这个循环,我想知道我是否不完全理解在使用中的选择,或者我刚刚在这段代码中做了一个错误:
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,但是我得到的是所有的事件记录。
我错过了什么?
发布于 2014-04-03 15:15:19
我认为(select eventid from @driver)
应该是(select id from @driver)
发布于 2014-04-03 15:33:25
由于您使用的是两个表,一个是虚拟表,一个是物理表,所以解决方案是使用INNER JOIN
子句:
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查询获得相同的结果:
SELECT eventid FROM event WHERE event_code_name IS NULL
发布于 2014-04-03 15:15:29
你是不是错过了一个独特的?
从事件中的事件中选择不同的事件in (从@驱动程序中选择事件in)
https://stackoverflow.com/questions/22841845
复制相似问题