Mysql - Поиск записи, которая удовлетворяет 2 точным датам - PullRequest
0 голосов
/ 21 апреля 2020

Довольно новый для mysql & сообщества переполнения стека. - У меня есть вопрос, который меня беспокоит.

Я пытаюсь вернуть результаты людей, которые вынули книгу в 2 определенные c даты. Пока это мое усилие:

SELECT borrower.fname, borrower.lname
FROM borrower, loan
WHERE borrower.cardno = loan.cardno
AND loan.dateout = DATE '2019-01-01'
AND loan.dateout = DATE '2018-02-01';

Я не уверен, почему я не получаю никаких результатов - когда я запускаю запрос только с одной датой, это приводит к результатам. Из этих результатов я вижу, что есть записи, которые должны удовлетворять критериям, я не уверен, в чем я ошибаюсь.

Может кто-нибудь точно определить, где я ошибаюсь? Я думал, что это выглядело довольно просто, но это сводит меня с ума.

Спасибо

1 Ответ

0 голосов
/ 21 апреля 2020

Одна опция использует exists дважды:

select b.*
from borrower b
where
    exists (select 1 from loan l where l.cardno = b.cardno and l.dateout = date '2019-01-01')
    and exists (select 1 from loan l where l.cardno = b.cardno and l.dateout = date '2018-02-01')

При индексе loan(cardno, dateout) это должно быть эффективным решением.

В качестве альтернативы вы можете использовать агрегирование:

select b.fname, b.lname
from borrower b
inner join loan l on l.cardno = b.cardno
where l.dateout in (date '2019-01-01', date '2018-02-01')
group by b.fname, b.lname
having
    max(case when l.dateout = date '2019-01-01' then 1 end) = 1
    and max(case when l.dateout = date '2018-02-01' then 1 end) = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...