I have two tables in my database and they each share the a field called cID. So here’s an example:
Parent Table
_______________
cID Name
-- ------
1 Record #1
2 Record #2
3 Record #3
Child Table
_______________
ID cID Name
-- --- -----
10 1 Record #1
11 1 Record #2
12 2 Record #3
13 1 Record #4
So what’s happened is that someone has gone in and deleted cIDs from the parent the parent table and the child table still has those cIDs but they now reference nothing. Is there a SQL statement that I could use to select all the records in the child table that no longer have a cID in the parent table?
Advertisement
Answer
In your text, you say that parents are missing, but your example shows a parent without a child.
For parents without children in a left join:
select
p.*
from
parent p
left join child c on p.cId = c.cId
where
c.cid is null
I created a SQL Fiddle as an example.
For children without parents:
select
c.*
from
child c
left join parent p on p.cId = c.cId
where
p.cid is null
Note that if you changed the first query to a RIGHT
join, you’d get the same answer as the second query where I’ve changed the sequence of the tables.