Connecting Tech Pros Worldwide Help | Site Map

sql getting orphan records

  #1  
Old June 30th, 2006, 09:15 AM
julian_m
Guest
 
Posts: n/a

I'm working with mysql without referential itegrity.
Let me make some small example:

tableA
+-----------+---------------+
| id_1 | data_1 |
+-----------+---------------+
| 1 | bla1 |
| 2 | bla2 |
| 3 | bla3 |
+-----------+---------------+

tableB

+-----------+------------+
| id_2 | fk_1 |
+-----------+------------+
| 2_1 | 1 |
| 2_2 | 3 |
| 2_3 | 6 |
+-----------+------------+

Every record on tableA, should have at least 1 record on tableB, linked
trhough fk_1, but as times goes

on, and due users doing wrong things, there could be problems.

For instance, in the above example, there is one record in tableA
(id_1=2) that has no related record on

tableB , and there is one record in tableB (id_2=2_3) whose fk_1 value
doesn't exists on tableA

Now the question:
1) How could I select all records on tableA which has no related
records on tableB?
2) How could I select all records on tableB which has no related
records on tableA?

I've been tring with left and right joins, but I can't figure out how
to do in order to get just "orphan"

records instead full sets

regards - julian

  #2  
Old June 30th, 2006, 01:55 PM
Paul Lautman
Guest
 
Posts: n/a

re: sql getting orphan records


julian_m wrote:[color=blue]
> I'm working with mysql without referential itegrity.
> Let me make some small example:
>
> tableA
> +-----------+---------------+[color=green]
>> id_1 | data_1 |[/color]
> +-----------+---------------+[color=green]
>> 1 | bla1 |
>> 2 | bla2 |
>> 3 | bla3 |[/color]
> +-----------+---------------+
>
> tableB
>
> +-----------+------------+[color=green]
>> id_2 | fk_1 |[/color]
> +-----------+------------+[color=green]
>> 2_1 | 1 |
>> 2_2 | 3 |
>> 2_3 | 6 |[/color]
> +-----------+------------+
>
> Every record on tableA, should have at least 1 record on tableB,
> linked trhough fk_1, but as times goes
>
> on, and due users doing wrong things, there could be problems.
>
> For instance, in the above example, there is one record in tableA
> (id_1=2) that has no related record on
>
> tableB , and there is one record in tableB (id_2=2_3) whose fk_1 value
> doesn't exists on tableA
>
> Now the question:
> 1) How could I select all records on tableA which has no related
> records on tableB?
> 2) How could I select all records on tableB which has no related
> records on tableA?
>
> I've been tring with left and right joins, but I can't figure out how
> to do in order to get just "orphan"
>
> records instead full sets
>
> regards - julian[/color]

If you've got at least MySQL 4.1 then

SELECT * FROM tableA as a where NOT EXIST SELECT * FROM tableB as b WHERE
a.id_1 = b.fk_1

and vice versa for the other orphans

Alternatively for older versions of MySQL

SELECT * FROM tableA as a LEFT JOIN tableB as b ON a.id_1 = b.fk_1 WHERE
..bfk_1 IS NULL

and vice versa for the other orphans

For future reference, the comp.databases.mysql group is a better bet for
questions on MySQL. The
comp.lang.php group is best for questions on PHP!


Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
Merge Replication and Trigger Problem Benzine answers 8 January 5th, 2007 10:15 PM
MySQL tips that I have come across Mike Chirico answers 0 July 20th, 2005 01:09 AM