[mysql] vergelijking van tabellen

Pagina: 1
Acties:

  • kroeske
  • Registratie: Mei 2000
  • Laatst online: 25-03 11:35
Ik probeer in MySQL 3.23.58 een query te schrijven om twee tabellen met elkaar te vergelijken. wat inhoudt dat ik eigenlijk alleen de primairy keys terug wil krijgen uit de eerste tabel die niet voorkomen in de tweede tabel.

door middel van twee queries (een inner join en een left join tussen de tabellen) ben ik er wel achter dat er een redelijk gat in zit (ruim 300 rows).

Ik had gehoopt eea met een subselect en having op te kunnen lossen echter lijkt deze versie van mysql dat niet te ondersteunen.

code:
1
2
3
SELECT k.uid
FROM tabel1 k
LEFT JOIN tabel2 i ON k.uid = i.uid


levert 3674 resultaten op


code:
1
2
3
SELECT k.uid
FROM tabel1 k
INNER JOIN tabel2 i ON k.uid = i.uid


levert 3997 resultaten op.


zoeken in de manual van MySQL leverde geen resultaat op, vandaar dat ik mijn hoop op jullie vestig voor een zetje in de goede richting.

  • gilgames
  • Registratie: April 2004
  • Laatst online: 06-11-2023
Om het resultaat dat jij wilt uit een left-join te krijgen moet je ook nog de matchende rijen uit de result-set filteren
MySQL:
1
2
3
4
SELECT k.uid
FROM tabel1 k
LEFT JOIN tabel2 i ON k.uid = i.uid
WHERE i.uid IS NULL
Dit staat gewoon in de manual uitgelegd bij de left joins

Omdat de resultaten die je post zijn precies het omgekeerde zijn van wat ik zou verwachten post ik toch maar. Een left join levert namelijk ook die rijen uit tabel1 op die niet in tabel2 zitten en een inner join hoort dus minder rijen op leveren. Volgens mij is het veel eenvoudiger om een not exists met subquery gebruiken
SQL:
1
2
3
SELECT k.uid
FROM tabel1 k
WHERE NOT EXISTS (SELECT 1 FROM tabel2 i WHERE i.uid = k.uid)

Ik weet niet hoe MySQL hiermee omgaat maar bij de aantallen die je noemt zal de performance hit wel meevallen.