![]() | 1 GlobalNPC 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 F281M6Dh8DXpD1g2 2022-09-27 01:45:01 +08:00 via iPhone union all 之后 group by 全字段 having count > 1 |
![]() | 4 nnnneymarjr OP @infun 我当时就是这么说的,面试官也没给反馈,感觉跟他心中的答案差的挺远的 |
![]() | 5 mazhan465 &nsp;2022-09-27 10:32:01 +08:00 ![]() 每条字段计算一遍 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 首先是“比较大的表”,这个是坑,你要先反问并确认多少数据量以及使用的数据库,才能决定采用的方法;其次,就是看你面试的职位,是偏技术开发还是数据方面,再挑适合的实现方法。当然不排除面试官问的很随意…… |