Toon posts:

[SQL] Alleen waardes tabel 1 tonen <> voorkomen tabel2

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het lukt me momenteel niet om met een sql-statement gegevens uit tabel 1 te halen die niet in tabel 2 staan.

tabel1
id klantnaam
*******************
1 klant1
2 klant2
3 klant3
4 klant4
*******************

tabel2
id klantid
*******************
1 1
2 3
3 3
*******************

Nou wil ik graag dus een query die ervoor zorgt dat ik uit tabel1 de klanten te zien krijg waarvan geen klantid in tabel2 voorkomt. In dit voorbeeld zou klant2 en klant4 getoond moeten worden.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
SQL:
1
2
3
4
SELECT t1.*
FROM Tabel1 t1
LEFT OUTER JOIN Tabel t2 ON t1.Id = t2.KlantId
WHERE t2.klantId IS NULL

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


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Kijk eens in de documentatie naar het NOT IN statement

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:39
P_de_B schreef op dinsdag 23 augustus 2005 @ 09:42:
SQL:
1
2
3
4
SELECT t1.*
FROM Tabel1 t1
LEFT OUTER JOIN Tabel t2 ON t1.Id = t2.KlantId
WHERE t2.klantId IS NULL
Zo kan je het idd oplossen als je een DB hebt, die geen subqueries ondersteunt.
Ikzelf vind het duidelijker als je met een subquery werkt (als je DBMS dat toestaat; maar de meeste doen dat wel, behalve .... ).

https://fgheysels.github.io/


  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 23:47

The Eagle

I wear my sunglasses at night

Ik zou het zelf met een geneste subselect oplossen:
code:
1
2
select * from tabel_1 where id not in
(select distinct(id) from tabel_2)


Edit: de oplossing van Whoami dus :Y)

[ Voor 13% gewijzigd door The Eagle op 23-08-2005 09:46 ]

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • lier
  • Registratie: Januari 2004
  • Laatst online: 23:40

lier

MikroTik nerd

The_Eagle schreef op dinsdag 23 augustus 2005 @ 09:46:
Ik zou het zelf met een geneste subselect oplossen:
code:
1
2
select * from tabel_1 where id not in
(select distinct(id) from tabel_2)


Edit: de oplossing van Whoami dus :Y)
En waarom neem je de distinct in de subquery mee ?

code:
1
2
select * from tabel_1 where id not in
(select id from tabel_2)

Eerst het probleem, dan de oplossing


Verwijderd

Topicstarter
Cowl... ik snap eigenlijk niet waarom ik daar zelf niet uitgekomen ben

Onderstaande code heeft mij in ieder geval een juist resultaat opgeleverd...
zometeen alleen nog even testen hoe snel de query is bij 4000 records

code:
1
2
3
SELECT *
FROM tabel1
WHERE (((tabel1.id) Not In (select id from tabel2)));

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Met 4000 records zou het nog steeds snel moeten zijn. Voor een beetje database is 4000 records echt niks.

Als het toch langzaam is moet je eens naar je indexen kijken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
Net uitgeprobeerd in Access en 4000 records is inderdaad geen probleem
Pagina: 1