以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 求一段找出表B Not in 表A的行的代码 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=96076) |
-- 作者:chen3728060 -- 发布时间:2017/2/12 17:44:00 -- 求一段找出表B Not in 表A的行的代码 我有2个商品条码库,表A是98w条,表B是55w条。表A包含了表B所有的条码。(这2个商品条码库架构一样,只有一列,就是ItemID,而且条码不重复,是别人给我的,一个是2017年的,一个是2009年的,所有相差了这么多)
我想问下,假如在不直接写 sql语句的情况下,能利用狐表的工具(例如 SqlJoindatatable, sqlGroupDatatable之类),提取出表A比表B多的43w条码吗?
千万不要想下面这种,那个string已经爆了,装不下几十万条条码。而且效率也low爆了 Dim s As String = DataTables("表B").SQLGetComboListString("ItemID")
求一段提取出表A比表B多的43w行的代码,效率不要太差即可,不要求极致优化~谢谢 [此贴子已经被作者于2017/2/12 17:46:05编辑过]
|
-- 作者:有点色 -- 发布时间:2017/2/12 17:48:00 -- 直接写即可
Dim drs As List(of DataRow) = DataTables("表A").SQLSelect("ItemID not in (select ItemID From {表B})")
|
-- 作者:rjh4078 -- 发布时间:2017/2/12 18:46:00 -- 增加一个SQL查询表 处理起来方便很多
代码如下 se lect * from{表A} wh ere itemid not in (se lect itemid from{表B})
|
-- 作者:chen3728060 -- 发布时间:2017/6/30 20:46:00 -- 回复:(有点色)直接写即可?Dim drs As Lis... 我看网上有好多讨论sql in 和 exists 效率的问题,都说in 和not 是全表检索,会很卡之类的,但是刚才这个not in的语句确实很直观,
DataTables("表A").SQLSelect("ItemID not in (select ItemID From {表B})")
会不会效率很差的?还是狐表已经优化好检索代码了? [此贴子已经被作者于2017/6/30 20:47:08编辑过]
|
-- 作者:有点蓝 -- 发布时间:2017/6/30 22:03:00 -- 给2个表的ItemID都加上索引。 后台查询优化是数据库的事,狐表帮不上什么忙。 DataTables("表A").SQLSelect的话也只能这样用了。 如果是sql,下面2种方式可以自己测试一下,看数据库的执行计划,我这边数据少,看不出区别 Select a.* from 表A As a left join 表B As b on a.ItemID = b.ItemID where b.ItemID is null select * from 表A where ItemID not in(select ItemID from 表B) |