以文本方式查看主题

-  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")
s= "(\'" & s.Replace("|","\',\'") & "\')"


Dim drs As List(of DataRow)  = DataTables("表A").SQLSelect("ItemID not in " & s )

 

求一段提取出表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)