Q:

How do I select data from a table where I need to return rows which have a repeat value in one field and a specified value in another?

I apologise for the terribly-worded question, I tried to phrase it more clearly, but couldn't think of a way to do so.
My problem is this: I've got a table with ~20 columns. I need to find all rows which have a particular value in one of the columns, and within that set have the same value in another column as at least one other record.
So in analogous form, say I have a table of personal data (Names, DOBs, phone numbers, etc). How would I be able to get from that table the data for all of the people who have the Surname "Jones", and also the same birthday as anyone else with the same surname?
I've tried
select * 
from personal_details
where surname = 'Jones'
  and DOB in (select DOB
              from personal_details
              where surname = 'Jones'
              group by DOB
              having count(*) > 1);

Which hasn't given me the set I'm looking for. Can anyone point me in the right direction for how to be thinking about getting this properly?

A:

Use EXISTS to return a person if another person has same surname and DOB but a different phone number (or other unique data).
select *
from personal_details pd1
where pd1.surname = 'Jones'
  and exists (select 1 from personal_details pd2
              where pd2.surname = pd1.surname
                and pd2.DOB = pd1.DOB
                and pd2.phone <> pd1.phone)

