刚开始工作 业务能力比较薄弱 记录一下这几天遇见的一个业务问题
场景
先简单说一下场景,有一批客户(一张表),可以根据这个客户匹配出很多明细数据(另一张表),现在需要删除明细,一个客户可以匹配出很多的明细数据,在删除的时候如果某个客户的明细数据全部删除了,就删除这个客户。
删除时接口参数为明细表的id数组
明细表中字段有 id、customer_id、deleted 这三个字段(其他忽略)。
怎么直接写一个sql的到需要删除的客户id
思路一:
首先根据id查到客户id,在查到还有明细数据的客户id,吧这些id剔除掉就是需要删除的客户id
SELECT customer_id
FROM match_detail
WHERE deleted = 0 AND customer_id IN (
SELECT DISTINCT customer_id
FROM match_detail
WHERE id in (1,2,3,4) )
然后在代码中剔除掉就可以了。
思路二
第一种当然可以 但是能直接查出来需要删除的客户id更好,既然如此直接NOT IN 不就好了
大家可以想一下SQL应该怎么写。
我的想法是直接先查出来所有的客户id,然后查出有明细的客户ID,然后拿全量的客户ID NOT