Toon posts:

[SQL] Ingewikkelde SELECT query lukt niet *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ten eerste nog ff de beste wensen :)

ik heb de volgende tabellen.
Afbeeldingslocatie: http://www.driftin.nl/img.jpg

- Ik wil aan de hand van een aantal criteria BelBestandID's selecteren uit TblBelBestand.
- Aan de hand van die BelBestandID's wil ik dan de BelBestandLeden selecteren uit TblBelBestandLeden.
- De ID's die daarbij geselecteerd worden, zijn dan nodig voor 't ophalen van de Klant-records uit TblKlant.

Het volgende: Ik wil aan een bestaand BelBestand-record nieuwe BelBestandLeden toevoegen. Ik doe dus een selectie van BelBestand-records die bijvoorbeeld voldoen aan, BelBestandWeek=3. De leden die aan deze BelBestand-records gekoppeld zijn, moeten dus weergegeven worden.

Maar nu is het mogelijk dat er aan het BelBestand-record waar ik nieuwe leden toe wil toevoegen, al een lid staat wat in de andere BelBestand-records(die ik zojuist geselecteerd heb met BelBestandWeek=3) ook aanwezig is. Ik wil dus voorkomen dat er dubbele leden aan een BelBestand-record gekoppeld worden.

Omdat de BelBestandLeden in een datagrid getoond worden wil ik voorkomen dat de leden die all aan het huidige BelBestand-record gekoppeld zijn, worden weergegeven in de datagrid.

Een voorbeeld:

Ik heb een BelBestand met daaraan 2 leden gekoppeld.
Deze leden hebben het BelBestandLidKlantID 1 en 2.

Nou ga ik een selectie doen om andere leden toe te voegen.
Ik Selecteer alle BelBestanden die voldoen aan BelBestandWeek=3.
Hieruit volgen 2 Belbestanden met daaraan gekoppeld 4 leden.
Deze leden hebben de volgende BelBestandLidKlantID 2, 4, 5, 1

In het datagrid moeten dus alleen de leden getoond worden met de ID's 4 en 5 omdat deze nog niet voorkomen in het BelBestand-record waar ik nieuwe leden wil toevoegen

Hoe kan ik er nu met een query voor zorgen dat alleen die ID's dus worden opgehaald uit de database? Ik ben al heel wat bezig geweest met WHERE... IN (SELECT...) Maar kreeg het niet voor elkaar.... :/

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
select klantid from tblklant join derest where belbestandweek=3 and klant id not in (select klantid from belbestand join iets where belbestandid = "id van bestand waarin ze moeten worden toegevoegd")
Zoiets dus, je selecteert ze allemaal en dan haal je degene die al voorkomen in het doel belbestand weg.

[ Voor 3% gewijzigd door Gert op 02-01-2005 02:14 . Reden: Zpelling ]


Verwijderd

Topicstarter
Thx...ik heb het voor elkaar, je hebt me op de goede weg geholpen!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 11:39
Gert schreef op zondag 02 januari 2005 @ 02:13:
select klantid from tblklant join derest where belbestandweek=3 and klant id not in (select klantid from belbestand join iets where belbestandid = "id van bestand waarin ze moeten worden toegevoegd")
Zoiets dus, je selecteert ze allemaal en dan haal je degene die al voorkomen in het doel belbestand weg.
Aangezien een not in werkelijk rampzalig is voor elke SQL, kan je 'm beter schrijven als:
SQL:
1
2
3
4
select klantid from tblklant k
  left join TblBelBestandLeden x1 on x1.BelBestandLidKlantID=k.KlantID 
  left join TblBelBestandLeden x2 on x2.BelBestandLidKlantID=k.KlantID 
  left join TblBelBestand bb on x1.BelBestandlidID=bb.BelBestandID and x2.BelBestandLidKlantID is null


ik heb dit even uit mijn hoofd opgeschreven, maar volgens mij is 'ie correct.

[ Voor 2% gewijzigd door jvdmeer op 06-01-2005 13:01 . Reden: Aliassen ingevuld, want de tabelnamen zijn wel erg lang ]


Verwijderd

Topicstarter
Ook dit kan ik ook eens gaan proberen, maar waar staan die x1, x2 en k en bb dan voor? Om de tabellen te identificeren oid???

[ Voor 50% gewijzigd door Verwijderd op 07-01-2005 13:38 ]


  • whoami
  • Registratie: December 2000
  • Nu online
x1, x2 en bb zijn aliassen, zeg maar een 'andere naam voor een tabel binnen je query'.
Op die manier moet je bv niet iedere keer de volledige naam van je tabel gaan uittypen, en op die manier kan je ook 2x op dezelfde tabel joinen binnen dezelfde query.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Thx, dit gaak morgen ff proberen, nu weekend vieren!

Verwijderd

Topicstarter
Ik ben dus aan het proberen gegaan, maar krijg constant de melding voor een syntax fout... Ik snap ook niet waar ik nu de WHERE clause moet zetten?

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

en gebruik aub niet klakkeloos xxxID als primary keys...

zorgt enkel voor problemen, zoek liever een goeie primary key en vermijd later VEEL problemen.

ASSUME makes an ASS out of U and ME


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Verwijderd schreef op zaterdag 08 januari 2005 @ 12:35:
Ik ben dus aan het proberen gegaan, maar krijg constant de melding voor een syntax fout... Ik snap ook niet waar ik nu de WHERE clause moet zetten?
code:
1
2
3
4
5
6
select
from
where
group by
having
order by

Who is John Galt?


  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 11:39
justmental schreef op zaterdag 08 januari 2005 @ 13:11:

1. select
2. from
3. join
4. where
5. group by
6. having
7. order by
Dit is de volgorde zoals SQL ze wil hebben.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

jvdmeer schreef op zaterdag 08 januari 2005 @ 19:36:
Dit is de volgorde zoals SQL ze wil hebben.
Join is een onderdeel van de from clausule.

Who is John Galt?

Pagina: 1