Fairly new to mysql & the stack overflow community. – I have a question that’s been bugging me.
I’m trying to return the results of individuals that have taken out a book on 2 specific dates. This is my effort so far;
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';
I’m not sure why I’m not getting any results – When I run the query with just one date it comes up with results. I can see from these results that there are definitely records that should satisfy the criteria, I’m not sure where I’m going wrong.
Can anyone pinpoint where I’m going wrong? I thought it looked quite straightforward but it’s driving me crazy.
Thanks
Advertisement
Answer
One option uses exists twice:
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')
With an index on loan(cardno, dateout), this should be an efficient solution.
Alternatively, you can use aggregation:
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