SQL (MariaDB): удалить / игнорировать из сгенерированных результатов, если один экземпляр имеет значение true

#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
 

Пример скрипки SQL

В этом случае, если ваше соединение найдет что-то, тогда подзапрос customer_id будет не нулевым

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

1. это было именно то, что я искал, спасибо.