Mysql: как получить обратный результат для данного условия? - PullRequest
0 голосов
/ 30 апреля 2019

Я написал запрос, чтобы получить полную противоположность результата, который выдает мой запрос.

запрос 1:

select count(*) from DB.titlecard tt 
    join _date d on d.td_id = tt.td_id
    join sometask s on s.s_id = tt.s_id and d.em_id = s.em_id
    where d.`date` > "2019-01-01";

он дает мне счет 21354 результат.

запрос 2: (аналогичный запрос без соединения с несколькими заданиями)

select count(*) from DB.titlecard tt 
    join _date d on d.td_id = tt.td_id
    where d.`date` > "2019-01-01";

, который производит 28984

мне нужны записи, которые отличаются от запроса 2 - запрос 1

примерно так, но он дает 1000 000 записей.

select count(*) from DB.titlecard tt 
        join _date d on d.td_id = tt.td_id
        join sometask s on s.s_id <> tt.s_id and d.em_id = s.em_id
        where d.`date` > "2019-01-01";

я знаю, чтобы получить разницу, сравнивая оба запроса.

но я ищу лучший способ в пределах одного запроса (потому что я добавил только одну таблицу в запросе 1)

только это была разница, запрос 1:

join sometask s on s.s_id = tt.s_id

условие, которое я хочу применить,

join sometask s on s.s_id <> tt.s_id

Ответы [ 2 ]

4 голосов
/ 30 апреля 2019

Если вы измените JOIN на LEFT JOIN, а затем выберите только те строки, где s.id равно NULL, вы получите желаемое количество:

select count(*) from DB.titlecard tt 
    join _date d on d.td_id = tt.td_id
    left join sometask s on s.s_id = tt.s_id and d.em_id = s.em_id
    where d.`date` > "2019-01-01" and s.s_id IS NULL;
1 голос
/ 30 апреля 2019

Это может быть довольно сложно - особенно если есть значения NULL или дублирующиеся строки. Я предполагаю, однако, что это делает то, что вы хотите:

select count(*) - count(s.s_id)
from DB.titlecard tt join
     d
     on d.td_id = tt.td_id left join
     sometask s
     on s.s_id = tt.s_id and d.em_id = s.em_id
where d.`date` > '2019-01-01';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...