#sql #mariadb
#sql #mariadb
Вопрос:
У меня есть таблица идентификаторов клиентов и идентификаторов ответов:
customer_id campaign_id
20 8
152 9
1575 9
57898 9
152 10
1575 10
888 10
Я снова создам еще один список клиентов для кампании 10, но мне нужно удалить идентификаторы клиентов, которые уже ответили на кампанию 10, достаточно просто:
Таблица:
SELECT customer_id FROM responses WHERE campaign_id <> 10
Результат:
customer_id
20
152
1575
57898
Однако моя проблема заключается в том, что если вы заметили, что клиенты 152 и 1575 также ответили на кампанию 9, то, таким образом, приведенный выше запрос все равно будет включать клиентов, потому что их ответ на кампанию 9 не равен 10.
Запрос должен сгенерировать список идентификаторов клиентов, но полностью удалить / игнорировать идентификаторы клиентов, которые равны campaign 10. Если я генерирую в кампании 10, и они ответили в кампании 10, не имеет значения, ответили ли они в кампании 8, 9, 200 и т. Д., Они не должны быть включены.
Мои желаемые результаты:
customer_id
20
57898
Я попытался сгенерировать клиентов, у которых таблица ответов равна НУЛЮ FROM responses WHERE customer_id IS NULL
, однако из-за этого возникли проблемы, поскольку, поскольку это кампания 10, технически можно было бы разрешить включить customer_id 20 и / или 57898, поскольку они не ответили из campaign 10.
Я надеюсь, что это имеет смысл, спасибо за любую помощь.
Ответ №1:
Вы можете присоединиться к той же таблице с условием исключения и сгруппировать по cutomer_id, например
SELECT res.customer_id FROM responses res
LEFT JOIN (
SELECT customer_id FROM responses WHERE campaign_id = 10
) sub ON sub.customer_id = res.customer_id
WHERE sub.customer_id is null
GROUP BY res.customer_id
В этом случае, если ваше соединение найдет что-то, тогда подзапрос customer_id будет не нулевым
Комментарии:
1. это было именно то, что я искал, спасибо.