@rinaz22

Как переделать этот запрос с применением JOIN?

Всем привет. Как можно переделать этот запрос с применением JOIN? Данный код не устроил потому, что IN не может содержать много данных, а вторые запросы получают > 1000 записей. Соответственно результат получается не таким каким должен быть.
SELECT
    `email`,
    COUNT(`email`) AS `count`
  FROM
    `e_stat`
  WHERE
    `email` NOT IN (
      SELECT
        `e_stat`.`email`
      FROM
        `e_stat`,
        `pb`
      WHERE
        `pb`.`e_stat_id` = `e_stat`.`id`
        AND `e_stat`.`msg` = '68'
    )
    AND `email` IN (
      SELECT
        `e_stat`.`email`
      FROM
        `e_stat`,
        `pb`
      WHERE
        `pb`.`e_stat_id` = `e_stat`.`id`
        AND `e_stat`.`msg` != '68'
    )
  GROUP BY
    `email`
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 1
LaRN
@LaRN
Senior Developer
Можно попробовать конструкцию EXISTS.
Как-то так:
SELECT
    tt.`email`,
    COUNT(tt.`email`) AS `count`
  FROM
    `e_stat` AS tt
  WHERE NOT EXISTS (
      SELECT 1
        FROM `e_stat`
        JOIN `pb`
          ON `pb`.`e_stat_id`  = `e_stat`.`id`
       WHERE `e_stat`.`msg`   = '68'
         AND `e_stat`.`email` =  tt.`email`) 
       GROUP BY tt.`email`
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы