У меня есть приложение, которое получает объект и генерирует динамический c запрос для сбора данных отчетов. Этот объект содержит свойства фильтра, которые в конечном итоге переводятся в операторы «WHERE» в MySQL. Более простая и актуальная c версия сгенерированного запроса выглядит примерно так:
SELECT cr3.id AS col_1,
count(table1.ids) AS col_2
FROM table1
LEFT JOIN table2 cr3 ON table1.id = cr3.Id
WHERE cr3.id NOT IN ('val') GROUP BY 1;
Запрошенная БД имеет этот набор данных (без применения какой-либо фильтрации):
| col_1 | col_2 |
| null | 100 |
| val | 100 |
Когда это выполняется, набор результатов пуст . Ожидалось, что я получу первую строку набора данных:
| null | 100 |
Если я откорректирую предложение WHERE из
WHERE cr3.id NOT IN ('val') => WHERE (cr3.id NOT IN ('val') OR cr3.id IS NULL)
, я получаю ожидаемые результаты, но они динамически генерируются для разных типы запросов, и я не могу найти способ настроить оператор «NOT IN», чтобы он работал правильно и возвращал все, что не соответствует тому, что указано в качестве аргумента.
Есть идеи?