Thanks to this great community I’ve already had a huge success in my data searching. Using:
select patient.last, patient.first, patient.birth, count(*) from patient group by patient.last, patient.first, patient.birth having count(*) > 1
It listed out all my duplicate values! Now, I’d like to take this a step farther so that I can list ONLY those duplicates that have an appointment on a certain day. There are several issues I’m running into though.
First only one of the two duplicates will have an appointment.
Second the appointment date is stored on a different table (fun enough called APPT)
I tried:
select appt.date from appt where appt.date=curdate()+1 union select patient.last, patient.first, patient.birth, count(*) from patient group by patient.last, patient.first, patient.birth having count(*) > 1
But this caused an error about columns not matching. I couldn’t figure out how to innerjoin because when I selected appt.date it affected the group by.
Any thoughts?
Advertisement
Answer
I assume (as you say in the comment) there is a column patunique
in the table patient
which is the primary key and also in the table appt
which refernces the column in the table patient
.
So use EXISTS twice to identify the rows that meet the conditions:
select p.last, p.first, p.birth, count(*) counter from patient p where exists (select 1 from patient where patunique <> p.patunique and last = p.last and first = p.first and birth = p.birth) and exists (select 1 from appt where patunique = p.patunique and date = curdate() + 1) group by p.last, p.first, p.birth