Исключить обе строки, одна из которых не соответствует критериям - самостоятельное соединение? - PullRequest
0 голосов
/ 25 февраля 2011

У меня есть таблица, в которой хранятся предпочтения человека в любой день. ;)

customer_id, tea_preference,     date
     1        'yes please'    2011-01-01
     1        'no thanks'     2011-01-02

и мне нужно найти клиентов, которым нравится чай, в заданном диапазоне дат, например:

SELECT * FROM customers
WHERE tea_preference = 'yes please'
AND date BETWEEN '2011-01-01' AND '2011-01-03'

Теперь этот запрос даст одно совпадение, но если клиент не любит чай в одну из дат в диапазоне, я не хочу совпадений для этого клиента ...

Я пробовал самостоятельные объединения, но либо они не отвечают, либо я делаю это неправильно, так как не могу получить набор результатов, который мне нужен. Помощь?!

1 Ответ

1 голос
/ 25 февраля 2011

Может быть:

SELECT c1.* FROM customers c1
WHERE c1.tea_preference = 'yes please' 
AND c1.date BETWEEN '2011-01-01' AND '2011-01-03'
AND NOT EXISTS 
    (SELECT c2.* FROM customers c2 
    WHERE c2.tea_preference = 'no thanks'
    AND c2.date BETWEEN '2011-01-01' AND '2011-01-03' 
    AND c1.custom_id = c2.customer_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...