Toon posts:

[SQL] Problemen met NOT IN bij Bungalowpark project

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor een project (fictief Bungalowpark) heb ik de onderstaande query geschreven (in MS Access):

code:
1
2
3
4
SELECT Artikel.ArtikelId, Artikel.Merk, Artikel.Type, Artikel.Status, 
Artikel.Huurprijs FROM Artikel INNER JOIN 
ArtikelGast ON Artikel.ArtikelId=ArtikelGast.ArtikelId WHERE 
Artikel.ArtikelId NOT IN (SELECT ArtikelId FROM ArtikelGast);
Het gaat er om dat ik de artikelen uit een artikelenlijst selecteer die niet verhuurd (dus niet in de de tabel ArtikelGast staan) zijn.

Wanneer ik deze code gebruik om juist wel alleen de artikelen uit de tabel Artikel te halen, die wel in verhuurd zijn (dus wel in de tabel ArtikelGast) , dan krijg ik wel records terug. Wanneer ik de artikelen opvraag die dus niet verhuurd zijn, krijg ik geen records terug, terwijl in de tabel Artikel 30 artikelen staan die lang niet allemaal zijn verhuurd.

Ik heb alle syllabussen hier op de Hogeschool (Alkmaar) en Google er al op nageslagen, maar nergens een passend antwoord kunnen vinden. Is er iemand die mij bij dit probleem kan helpen?

Alvast bedankt.

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Logisch, want je vraagt alle combinaties op van 'Artikel' met 'ArtikelGast', en daarvan wil je de combinaties waarvan 'ArtikelGast' niet bestaat. Die zijn er niet!

Jij zoekt:
code:
1
2
3
4
SELECT Artikel.ArtikelId, Artikel.Merk, Artikel.Type, Artikel.Status, 
Artikel.Huurprijs FROM Artikel LEFT OUTER JOIN 
ArtikelGast ON Artikel.ArtikelId=ArtikelGast.ArtikelId WHERE 
ArtikelGast.ArtikelId IS NULL


edit:
Ik haal left outer en right outer altijd door elkaar, 't kan zijn dat ik ook nu een foutje heb gemaakt ;-)

[ Voor 18% gewijzigd door Varienaja op 30-01-2006 14:38 ]

Siditamentis astuentis pactum.


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
wat jij doet met die inner join is alleen de artikelen en artikelgasten opvragen die in zowel de 'artikel' als de 'artikelgast' tabel voorkomen.

daarna filter je in je where dat je alleen deze wilt die daar niet in komen..

alles - alles = .... juist..

je denk ik het beste je join type veranderen

edit:
sjit te laat ;)

[ Voor 9% gewijzigd door BasieP op 30-01-2006 14:40 ]

This message was sent on 100% recyclable electrons.


Verwijderd

Topicstarter
Het is gelukt met de LEFT OUTER JOIN.
Hierover hebben wij nog geen theorie gehad ;) Maar in ieder geval weer iets geleerd.
Bedankt.

Verwijderd

Verwijderd schreef op maandag 30 januari 2006 @ 14:43:
Het is gelukt met de LEFT OUTER JOIN.
Hierover hebben wij nog geen theorie gehad ;) Maar in ieder geval weer iets geleerd.
Bedankt.
Deze outer join met where = null is een trucje om op systemen die geen subqueries aankunnen (lees mySQL) toch de data op te kunnen vragen.

Persoonlijk zou ik het op iets als dit houden.

SQL:
1
2
3
4
5
SELECT Artikel.ArtikelId, Artikel.Merk, Artikel.Type, Artikel.Status, 
Artikel.Huurprijs FROM Artikel
where Artikel.ArtikelID not in (
SELECT ArtikelId FROM ArtikelGast
)


Zelfde antwoord en stukken inzichtelijker. En in jou geval, ook dat wat je docent verwacht. :)

[ Voor 3% gewijzigd door Verwijderd op 30-01-2006 19:22 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-04 17:49

NMe

Quia Ego Sic Dico.

Verwijderd schreef op maandag 30 januari 2006 @ 14:43:
Het is gelukt met de LEFT OUTER JOIN.
Hierover hebben wij nog geen theorie gehad ;) Maar in ieder geval weer iets geleerd.
Bedankt.
Reden te meer om de volgende keer eerst onze FAQ door te nemen, waar een heel duidelijk stuk staat over alle mogelijke soorten joins. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1