最近有个需求需要需要从400个数据库表中找出哪些用户在3个月内没有回答过问题.
先说下 每个数据库表的数据在千万左右,如果你想省事用子查询或者联合查询,这种想法首先pass. 下面说说我的思路.

  1. 从数据中查询3个月内回答过问题的用户记录下来
  2. 找出3个月之前回答过问题的用户.
  3. 找出三个月前回答问题的用户中 不包含 3个内回答问题的用户,则这个就是我们要的结果

这里可以使用命令:可以对导出数据进行先 sort 然后在 用户comm 命令对比,即可非常容易的得到结果.
下面说下 comm 命令:
有两个文件 a.txt

vim  a. txt 
aaa
bbb
ccc
ddd

vim b.txt
111
222
bbb
ccc
eee

这样我们来看下 通过comm命令后的效果

comm a.txt b.txt
列1     列2     列三
        111
        222
aaa
            bbb
            ccc
ddd
        eee

列1 为只有前面一个文件独有的数据
列2 为只有第二个文件中独有的数据
列3 为两个文件都有的
如果不想要那个列出现 只需要通过用减号 减掉即可.

例如: 只想想要列1的数据
则: comm -23 a.txt b.txt 即可,这样也完成了最上面的需求

注意: 此命令如果数据不是排序的情况下就不准了.
如果对未知的两份数据咱们最好先排序后再处理:

意则: 先排序,再唯一 然后在对比取出第一列
comm -23 <(sort a.txt|uniq ) <(sort b.txt|uniq )