关于 Select * from table where column not in(...)

AlexHwang 2004-01-09 10:49:45
如果not in (...)有很多,比方说2000条
这个语句效率如何?还有其他更合理的写法吗?

着几千个数据是没有规律的,每次都不一样。
...全文
122 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlexHwang 2004-01-11
  • 打赏
  • 举报
回复
还有,金蝶数据库和业务数据库分布在两台机器上
AlexHwang 2004-01-11
  • 打赏
  • 举报
回复
w_rose:

你有点自以为是啊,事实上是必须每次这样去验证。
你回答的不是我想要的。

这个不是我们公司的程序的问题,做的是金蝶财务软件的接口,很多东西要考虑到客户正在使
用的金蝶软件,如果两方面都是我做的,我还需要考虑这些东西吗?
w_rose 2004-01-11
  • 打赏
  • 举报
回复
我还是多一句:

....where not exists(select * from ....

没错,解决你的问题。rowset可以临时访问其他数据库。
w_rose 2004-01-11
  • 打赏
  • 举报
回复
其实已经回答问题了(效率如何?更好的?),却看不出来。我也就没有办法了!
w_rose 2004-01-11
  • 打赏
  • 举报
回复
我倒。这年头,越是好的程序员越找不到工作。
w_rose 2004-01-11
  • 打赏
  • 举报
回复
所以in里面的数字是程序从数据库A中取回来的,生成SQL后到数据库B里查找是否有该记录。而A中的数据生成的时候并不会去考虑B中是否存在,所以A中的数据对数据库B来说是没有规律不可重用的。
---------------------------------------------------------------------------------
你们的程序也太差劲啦。用得着一遍一遍去浪费网络和服务器资源么?
w_rose 2004-01-10
  • 打赏
  • 举报
回复
并不是考虑到效率的问题,只是觉得没有必要对没有很独特意义的东西费精力,我从来没用过in这种语法。
AlexHwang 2004-01-10
  • 打赏
  • 举报
回复
w_rose:

in里面的不是存在表里的阿,而且也不可能存到表里,都是没有规律的数字。
所以你说的我用不上。

实际是这样的,我要在两个数据库之间验证一致性,所以in里面的数字是程序从数据库A中取回来的,生成SQL后到数据库B里查找是否有该记录。而A中的数据生成的时候并不会去考虑B中是否存在,所以A中的数据对数据库B来说是没有规律不可重用的。
w_rose 2004-01-10
  • 打赏
  • 举报
回复
很偶然的时候,会写 where field in ('a','b') 这样的写法,但是in后边不会跟个子查询。
w_rose 2004-01-10
  • 打赏
  • 举报
回复
select ... from a where column_a not in (select column_b from b ...)

可以写成:

select ... from a where not exists(select * from b where column_b=a.column_a)

效率当然大大增加。当b表记录比较多时,建在column_b 上的索引更可以提高查询速度(如果b表有100万条记录,可以预期查询效率可以提高1千倍以上)。
AlexHwang 2004-01-09
  • 打赏
  • 举报
回复
这个语句是程序生成的,而且这个语句的使用频率很高,所以会很在意效率问题。
我就是想问问有没有更好的语句能实现相同的目的?
AlexHwang 2004-01-09
  • 打赏
  • 举报
回复
to 烛光:
这些值是不可重用的阿,难道我每次查找前先把他们插进去?
那样会不会更慢呢?
zhaoloudy 2004-01-09
  • 打赏
  • 举报
回复
2000条效率应该不会差很多吧。不过你有那么长的in (....)吗?还是转为子查询吧。
gmlxf 2004-01-09
  • 打赏
  • 举报
回复
如果过长,你可以将in (...)里面的1,2,3,4或者'a','b','c'..等插入一个临时表中

然后
select *
from t
where column not in
(select column from #tmp)
youngby 2004-01-09
  • 打赏
  • 举报
回复
有点问题了。
会比较慢!~

youngby 2004-01-09
  • 打赏
  • 举报
回复
Select COL1,COL2,COL3,COL4,... from table where column not in(...)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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