我有两张相同的桌子。我想比较这两个表并从中得到结果。条件是:
TABLE1 按TID 分组的每条记录将与TABLE2 按其每个TID 分组的所有记录进行比较。
如果要在TABLE2中发现TABLE1中的每个分组记录(TABLE2中的记录也按每个tid分组),则多达N(N是用户输入变量) ,然后该记录将被插入新表中。
例如,与下面的ss一样,按 TID 2 分组的 ITEM C-F-A 在table2中有3次出现,因此它们将被插入到新表中:
我已经尝试过为此编写代码并且它有效(vb.net),但编译器需要花费很多时间才能完成。主要原因是我正在处理一个庞大的数据库。
我在程序中完成的方法是将两个表填充到二维数组中。在将两个元素与if clause
进行比较时为数组赋值。
下面是我创建的2d数组:
但是这种方法真的很贵,我上面的真实数据库是第一个2d阵列有2k记录而第二个2d阵列有800个记录,当我尝试计算编译的估计时间时完成了,它显示了一个梦幻般的数字,大约16个小时..天啊!
所以我想知道,这个问题是否可以用mysql查询解决, 或其他方法比我所做的更有效?
答案 0 :(得分:0)
INSERT INTO tbl3
SELECT tbl1.TID, tbl1.ITEM
FROM tbl1
JOIN tbl2 ON tbl2.TID = tbl1.TID AND tbl2.ITEM = tbl1.ITEM
这将为tbl1中的每条记录插入一条记录到tbl3中,该记录在TID和ITEM标识的tbl2中有相应的记录。
这假设TID / ITEM是tbl1和tbl2中的唯一索引。
答案 1 :(得分:0)
好的,这是一个疯狂的,未经测试的猜测(WUG)。
方法如下:
SQL可能看起来像:
insert into table1
values (select * from table2 where tid in
(select tid, count(*) as cnt
from table2
where tid in (select distinct tid from table1)
group by tid
having cnt > 10)));
我怀疑语法是否正确(无法记住选择插入的确切语法),并且没有声称它可以起作用,但它是我的第一次拍摄,如果我想要全部在一个查询。