1
infun 2022-09-26 23:23:34 +08:00
如果只是 SQL 的话,这样?
select a. * from a join b on al=b1 and a2=b2 and a3=b3 ...; |
2
Jooooooooo 2022-09-26 23:24:30 +08:00
如果只需要看有没有的话
考虑下布隆过滤器 |
3
liprais 2022-09-27 01:45:01 +08:00 via iPhone
union all 之后 group by 全字段 having count > 1
|
4
nnnneymarjr OP @infun 我当时就是这么说的,面试官也没给反馈,感觉跟他心中的答案差的挺远的😥
|
5
mazhan465 2022-09-27 10:32:01 +08:00 1
每条字段计算一遍 MD5 摘要保存到文件,然后排序,双指针比较,MD5 相同的加载对应行的数据进行验证比较
|
6
allforone 2022-09-27 11:00:51 +08:00
可能问的是 inner join 的具体实现?先确认一下是算法题还是 sql 题。算法题的话可能想考 sort merge join 或者 hash join 一些优化实现。
|
7
dog82 2022-09-27 11:14:28 +08:00
5 楼的思路很不错
|
8
lookStupiToForce 2022-09-27 11:15:36 +08:00
以 pgsql 为例,每行数据 hash 一下加上主键(单一主键或者联合主键都行)后再比较最好
如果下面的 sql 一次跑不出来,先分别生成两张表然后用那两张新表去做最后的 join 比对 with t1 as( select f.primary_key, md5(CAST((f.*) AS text)) as hash from foo1 f ) , t2 as( select f.primary_key, md5(CAST((f.*) AS text)) as hash from foo2 f ) select t1.primary_key from t1 join t2 using (primary_key) where t1.hash = t2.hash |
9
agmtopy 2022-09-27 11:40:38 +08:00
猜?先比较索引字段,在比较其他?
|
10
nnnneymarjr OP @mazhan465 是一个不错的思路
|
11
nnnneymarjr OP @allforone 应该像是场景题
|
13
copper20 2022-09-27 12:50:56 +08:00
允许假阳性存在的话可以考虑布隆过滤器,线性时间能应该就能搞定了
*如果不是一道 SQL 题的话 |
14
zovencraig 2022-09-27 16:00:34 +08:00
首先是“比较大的表”,这个是坑,你要先反问并确认多少数据量以及使用的数据库,才能决定采用的方法;其次,就是看你面试的职位,是偏技术开发还是数据方面,再挑适合的实现方法。当然不排除面试官问的很随意……
|