отчет об исключениях между двумя таблицами

0

Мне нужно запустить какой-то отчет об исключении между двумя таблицами.

Таблица 1
Авторизоваться

Изображение 174551

Таблица 2 Сканирование

Изображение 174551

Теперь для входа в таблицу ящики регистрируются в системе с отдельной порцией, но в программе "Сканирование" она объединяет поле и пакет.

Я пытаюсь выяснить, какие ящики не были отсканированы, но были зарегистрированы.

Поэтому я написал сценарий ниже, но не дал мне правильного ответа, поскольку в результате ящики регистрируются и проверяются. Странная причина??

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)

Если я ошибаюсь? Спасибо

  • 0
    Вы дали нам образцы данных, и это хорошо, но вы не объяснили, как эти две таблицы связаны вообще. Как мы можем объединить эти две таблицы и каков ваш ожидаемый результат?
  • 0
    @TimBiegeleisen, я связал имя Box = Box в скрипте, мне пришлось объединить box и batch в первой части моего оператора select, и я боюсь, что я ошибаюсь?
Показать ещё 3 комментария
Теги:

1 ответ

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 и конкатенацию строк. Это очень дорогое сравнение. Для лучшей долгосрочной эффективности рассмотрите возможность создания соответствующих столбцов соединения как login таблиц login в login и для scan.

  • 0
    Человек я тоже пропустил это .... Это прекрасно работает ... Большое спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню