群友的一个小问题,大意如下。我手中目前已知有若干ID列表,如[1,2,3,4,5]的ID,需要到某张表中查询出表中不存在的ID。

好像有点绕,实际列举数据说明下,比如此刻表中有ID为[2,4,5,6,7]的数据,那么最终查询出来的结果应当为[1,3],因为[1,3]在我们已知的列表[1,2,3,4,5]中,但是不在数据库的表[2,4,5,6,7]中,而[6,7]因为不在[1,2,3,4,5]中,所以也不符合要求。

其实这个问题很好解的,最直观的来说我们先拿[1,2,3,4,5],到表中查询[2,4,5,6,7]用in语句得到[2,4,5]的结果,之后再拿[1,2,3,4,5]到[2,4,5]的结果集中用not in语句就可以得到[1,3]。

但,问题不是这里,而是[1,2,3,4,5]不是一个结果集,而是入参,所以我们这里我们需要用到MYSQL的临时表。而如果[1,2,3,4,5]是在一张表里的结果的话,那么我们就可以换另一个思路了,用临时表[1,2,3,4,5]LEFT JOIN目标表使用id关联,并保留当前的[1,2,3,4,5]的列和目标表的ID列,关联后的结果如果目标ID列为空的数据可以再做一次过滤剔除。

Continue reading