[MySQL] Query om bestaan foreign keys te controleren?*

Pagina: 1
Acties:

  • Swinnio
  • Registratie: Maart 2001
  • Nu online
Het volgende is het geval: heb een tabel (tabel2) met een foreign key (tabel2_fk_tabel1_id) die wijst naar de primary key van een andere tabel (tabel1_id). In tabel1 is veel gerommeld, waardoor de primary keys niet een opeenvolgend bereik innemen (bv 1-9, 10-45, 50-100), hetgeen op zich geen probleem is natuurlijk.
Wat wel een probleem is, is dat de er een aantal elementen uit tabel2 bestaan waarvan de foreign key wijst naar niet-bestaande primary keys van tabel1. Aangezien tabel2 duizenden elementen heeft, is handmatig nagaan van deze inconsistentie geen optie.
Wat ik nodig heb is dus het volgende: een query die alle elementen van tabel2 toont die een foreign key hebben die geen bijbehorende primary key in tabel1 heeft. Met andere woorden: een tabel2_fk_tabel1_id die buiten het bereik van tabel1_id ligt. Het lijkt me dat dat met een join moet, maar ik weet te weinig van SQL om verder te komen, terwijl de query op zich niet heel moeilijk kan zijn.....

/edit: sorry voor de spelfout in de topic titel :)

[ Voor 3% gewijzigd door Swinnio op 07-07-2005 09:11 ]

If the world wouldn't suck, we'd all fall off


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Als ik het goed begrijp ben je op zoek naar de MySQL variant voor een 'not exists' constructie.
Dat kun je oplossen met een left outer join in combinatie met een 'is null' op de join kolom.

Who is John Galt?


  • Swinnio
  • Registratie: Maart 2001
  • Nu online
Het is inderdaad een soort van "not exists" die ik niet weet om te zetten in een query. Zou je wat preciezer kunnen zeggen hoe die left outer join er dan uit moet zien?

If the world wouldn't suck, we'd all fall off


  • whoami
  • Registratie: December 2000
  • Laatst online: 12:01
Als dat het geval is (records hebben in tabel2 die verwijzen naar niet bestaande records in tabel1), dan heb je geen foreign key constraints liggen. Als je dat wel zou hebben, dan zou dat gewoon niet kunnen voorkomen.

Hoe je het kunt checken:
dmv een subquery (als jouw versie van mysql dat ondersteund), indien jouw versie van MySQL geen subqueries ondersteunt, zul je het met een outer join moeten doen:
code:
1
2
3
4
select tabel2.*
from tabel2
left outer join tabel1 on tabel1.id = tabel2.f_ik
where tabel1.id is null

oid.

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
whoami schreef op donderdag 07 juli 2005 @ 09:18:
Als dat het geval is (records hebben in tabel2 die verwijzen naar niet bestaande records in tabel1), dan heb je geen foreign key constraints liggen. Als je dat wel zou hebben, dan zou dat gewoon niet kunnen voorkomen.
MySQL enforced geen relaties tot een bepaalde versie

( :X )

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Swinnio
  • Registratie: Maart 2001
  • Nu online
Heb een redelijk nieuwe SQL versie (4.0.15) en daarmee lukt bovenstaande prima! Bedankt!

If the world wouldn't suck, we'd all fall off

Pagina: 1