两个表之间的异常报告

时间:2018-05-28 06:32:03

标签: mysql

我需要在两个表之间运行某种异常报告。

  

表1       的登录

enter image description here

  

表2   扫描

enter image description here

现在,对于表格登录,这些框会在批次分开的情况下登录系统,但在“扫描”中,它将框和批次合并在一起。

我试图确定哪些盒子未被扫描,但已被记录。

所以我编写了下面的脚本,但它没有给我正确的答案,结果就是记录和扫描了这些框。有些奇怪的原因??

SELECT distinct CONCAT_WS('-', box, batch) As box
FROM   login a
WHERE  a.profid = '46'
and dt between '2018/01/01 00:00:01am' and '2018/05/25 23:59:59 PM'
       AND NOT EXISTS (SELECT 1
                       FROM   scan b
                       WHERE  b.profid = '6'
                              AND a.box = b.boxname)

我是不是错了? 谢谢

1 个答案:

答案 0 :(得分:0)

您的查询看起来很好,除了两个表之间的连接条件看起来不对,并且它根据您向我们展示的数据不起作用。试试这个版本:

SELECT DISTINCT CONCAT_WS('-', box, batch) AS box
FROM login a
WHERE
    a.profid = '46' AND
    dt >= '2018-01-01' AND dt < '2018-05-26' AND
   NOT EXISTS (SELECT 1 FROM scan b
               WHERE b.profid = '6' AND b.boxname LIKE CONCAT('%', a.box, '%'));

我所做的关键更改是将以下条件添加到EXISTS子查询中:

b.boxname LIKE CONCAT('%', a.box, '%')

这是有道理的,例如,如果您尝试将框DSDEN182与框名DSDEN182-BATCHG77899M匹配。

附注:虽然上述查询可能暂时无效,但连接条件同时使用LIKE和字符串连接。这是一个非常昂贵的比较。为了获得更好的长期性能,请考虑在loginscan表上创建正确的连接列。