SQL语言,存在A表但是不在B表中的数据

2020-06-08  本文已影响0人  一颗西蓝花_
背景

客户给了3万customer list,在平台上跑预估计算特征时,需要算力太大了,调了好几次资源都不行,内存都上t了,还是不行,于是乎,将3万拆分了两个1万5,分别预估。

问题

本来,可以使用的语法是

SELECT * FROM Table 
LIMIT 15000
SELECT * FROM Table
LIMIT 15000, 15000

这样就完成了两个预估批次的选择,但是开始,为了图方便,用了平台自定义的数据拆分算子,这就是血泪的开始。

平台自定义的数据拆分算子,将随机种子设置为0,两次拆分的结果会不一致(随机种子一样了,就该一致了啊TAT)这导致的结果就是,拆出来的两个batch 不是mutual exclusive。

但是,问题已经发生了,怎么办呢?想办法解决呗

解法
  1. 使用上文的办法,重新拆,重新跑两次结果,但是这个有一个弊端,跑一个batch需要24小时,跑两个batch就需要48小时,时间就是金钱啊💰,哪能浪费
  2. batch1已经预测好了,可以用总的list 减去batch1中的list,就剩下的是尚未被预测的list
    思路想好了,如何代码实现呢?代码的实现有如下思路,选择在总表(t1)中出现了的cust list,但是没有在batch1(t2)中出现的cust id。代码实现如下
SELECT  DISTINCT t1.id FROM t1
WHERE t1.id not in (SELECT t2.id FROM t2)

对吧,但是上述代码有一个问题,那就是我们的平台不支持not in,怎么办呢?思考其他解决方案。
我们可以使用 left join

select * from t1 left join t2 on t1.id = t2.id where t2.id is null

同时,也乘此机会,再次回顾left join

SQL LEFT JOIN 语法

SELECT col_name
FROM table1
LEFT JOIN table2
ON table1.col_name = table2.col_name
上一篇下一篇

猜你喜欢

热点阅读