Сравнить данные двух таблиц и получить список необычных данных

#mysql

#mysql

Вопрос:

У меня есть два подписчика таблицы и взимать плату

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

Я новичок в sql, не знаю, как это можно получить, я пробовал ниже sql, который не работает

 select * subscribers UNION select *from charge;
  

Структура таблицы :
подписчики :

 id || mobile|| subscribers_date 
  

заряд :

 id || mobile || status || charge_date
  

мое имя поля даты — subscribers_date.

Комментарии:

1. Поделитесь своими структурами таблиц вместе с образцом ввода и ожидаемым результатом

Ответ №1:

Используйте оператор NOT IN.

 Select * from subscribers where 
   mobile not in (select mobile from charge where charge_date > '2 months ago')
  

И вашей charge таблице нужен покрывающий индекс на charge_date, mobile

Комментарии:

1. Он работает для небольшой базы данных, размер моей таблицы огромен, поэтому он зависает.

2. Есть ли у вас индекс для subscribers_date, subscribers_id?

3. Я попробовал выбрать * из подписчиков wheresubscribers.id не входит (выберите идентификатор из начислений, где d_date >= date_format(curdate(), ‘%Y-%m-01’) — интервал 2 месяца)

4. Я вижу вашу проблему. Соединение выполняется не по идентификатору, а по номеру телефона. Я обновлю ответ

5. Я пробовал, тот же результат. таблица зависла, и она загружается и загружается… выберите * из подписчиков, где subscribers.mobile не включен (выберите мобильный из charge, где d_date >= date_format(curdate(), ‘%Y-%m-01’) — интервал 2 месяца)