#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 месяца)