Toon posts:

[.NET / SQL] Inner, outer, left, right, ......?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey allemaal,

Ik ben in een project bezig met het bewerken van 2 tabellen. Uit de ene tabel wil ik steeds 1 rij (TOP 1) ophalen, hier een bewerking mee uitvoeren en vervolgens een record wegschrijven in een volgende tabel (status tabel). Vervolgens moet opnieuw de eerste tabel worden ingelezen en moet weer 1 rij (TOP 1) worden ingelezen, maar .... ik wil dat alle records die reeds in de 2e tabel zijn weggeschreven worden overgeslagen.

Nu zit ik met de gedachte dat ik hier een JOIN voor nodig heb, maar ik kom niet achter de juiste constructie. Volgens mijn SQL boek heb ik een LEFT join nodig, maar dat geeft niet het gewenste resultaat.

Er bestaat een relatie tussen 2 velden uit tabel 1 en 2, dat joinen moet dus goed gaan.

Nog een keer in het kort: Hoe haal ik via een JOIN alle gegevens uit tabel 1 die nog niet in tabel 2 voorkomen.

Alvast bedankt :)

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 23:52
Een left join op tabel twee, en dan de null-values selecteren.
Zoiets:
SQL:
1
2
3
4
5
6
SELECT tabel1.*, tabel2.if
FROM tabel1
LEFT JOIN tabel2
ON tabel1.id = tabel2.id
WHERE
tabel2.id IS NULL

Maar aangezien je met .Net bezig bent, is het niet handiger om gewoon alles uit tabel 1 op te halen en door je resultset te itereren? Scheelt je totaalAantalRecordsInTabel1 - 1 queries.

[ Voor 31% gewijzigd door sig69 op 24-08-2006 16:34 ]

Roomba E5 te koop


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op donderdag 24 augustus 2006 @ 16:30:
Hey allemaal,


Nog een keer in het kort: Hoe haal ik via een JOIN alle gegevens uit tabel 1 die nog niet in tabel 2 voorkomen.
SQL:
1
2
3
4
SELECT *
FROM Tabel1 T1 
LEFT OUTER JOIN Tabel2 T2 ON T1.EenId = T2.EenId 
WHERE T2.EenId IS NULL


Overigens, wat jij beschrijft is een procedureel proces: 1 rij ophalen, er iets mee doen en de volgende rij ophalen. SQL is erg sterk in setgebaseerde operaties: bewerkingen op een grote hoeveelheid gegevens in 1 keer. Als je wat meer informatie geeft kunnen we wellicht kijken of dat in deze situatie ook mogelijk is. Dit zal waarschijnlijk erg goed voor de perfomance zijn.

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


  • Gurbe de n00b
  • Registratie: Juni 2003
  • Laatst online: 08-02-2024
Astu:

http://www.w3schools.com/sql/sql_join.asp

Heb je wel de topicstart gelezen ?

[ Voor 27% gewijzigd door whoami op 24-08-2006 16:57 ]

Portfolio


Verwijderd

Topicstarter
Bedankt voor alle reacties maar ik heb inmiddels een andere oplossing gevonden. Alle type joins die jullie voorstellen geven gek genoeg niet het gewenste resultaat, ik krijg of ALLE of GEEN records terug met de JOIN methode.

En op w3schools had ik als eerste al gekeken maar kreeg ik dus geen werkend resultaat uit.

Ik heb het nu voor elkaar gekregen met:

code:
1
2
SELECT  TOP 1 * FROM [tabelnaam] 
WHERE [kolomnaam] NOT IN(SELECT [kolomnaam] FROM [tabelnaam])

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

SQL:
1
2
3
SELECT TOP 1 *
FROM [tabelnaam] LEFT JOIN [tabel2naam] ON [kolomnaam] = [kolomnaam]
WHERE [kolomnaam] IS NULL

Deze zou, zoals twee heren hierboven al schrijven, toch echt moeten werken hoor. Dat doet hetzelfde als je subquery hierboven. Wat krijg je dan precies voor data terug als je deze (of een van de queries hierboven) probeert?

'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.


Verwijderd

Topicstarter
ik krijg of ALLE of GEEN records terug met de JOIN methode.
edit: misschien dat dit iets te maken heeft met het feit dat ik momenteel een MS Access database gebruik voor opslag van de data?

Het gebruiken van alle functionaliteit in SQL is geen optie omdat ik telkens 1 rij (TOP 1) nodig heb, daar in mijn code een bepaalde functie mee uit moet voeren en de status (gelukt / mislukt) in een resultaten tabel moet opslaan. Het is niet nodig om de gegevens op het beeld te tonen, werken met een datatable in mijn form is dus overbodig.

Maar het werkt nu en daar ben ik al erg blij mee. Performance is momenteel nog geen issue omdat er zowieso een delay van 1 seconde wordt gegenereerd na het eenmaal doorlopen van de loop.

Bedankt voor de hulp!

[ Voor 9% gewijzigd door Verwijderd op 24-08-2006 17:16 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Alle of geen zijn twee opties, en voor één en dezelfde query kan slechts één van die opties opgaan. ;) Ik heb zelf regelmatig een vergelijkbare query nodig gehad en gebruikt, en dat ging telkens prima. :) Maar goed, als performance echt geen issue is, dan kun je die subquery wel laten staan; al denk ik zelf dat een join toch mooier zou zijn.

Overigens, TOP gebruiken zonder verder je records te sorteren lijkt me niet echt slim. ;) Neem even een ORDER BY op in je hoofdquery, dan krijg je nooit overwachte resultaten terug.

'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