[Access] Tabellen vergelijken

Pagina: 1
Acties:

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Hallo!

Ik zit hier met 2 tabellen, en die zien er beide zo uit:

StudentnummerCode


Nu staan er in beide een heleboel records, en ik moet uit tabel1 (volgplus) de gegevens halen, die in tabel2 (osiris) níet staan...

Daarvoor had access voor ons gegenereerd;

code:
1
2
3
4
SELECT volgplus.Studentnummer, volgplus.Code
FROM osiris INNER JOIN volgplus on osiris.id = volgplus.id
WHERE (((volgplus.Studentnummer)<>osiris.studentnummer))
ORDER BY volgplus.Code;


Echter, dan vergelijkt ie alleen degene als ze ook nog eens op de juiste plek staan, en dat is het mooie, de hele tabel Osiris is door elkaar gehusselt, dus dat is geen mogelijkheid.
Hoe krijg ik nou toch de missende waardes in tabel2 als uitvoer?

Bij voorbaat dank

[ Voor 3% gewijzigd door GX op 03-03-2004 08:59 ]


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Dit geeft trouwens helemaal niets als output (en er zijn zeker records anders in tabel1 dan in tabel2):

code:
1
2
3
4
SELECT volgplus.Studentnummer, volgplus.Code
FROM volgplus
WHERE not exists(select * from osiris where volgplus.studentnummer = osiris.studentnummer
and volgplus.code = osiris.code);

  • bramseltje
  • Registratie: September 2001
  • Laatst online: 23-05 10:13
Kun je niet iets met een 'left join' doen? Dan krijg je alle rijen uit de linker dbase en zoekt ie in de rechter naar eventuele rijen die ook aan je voorwaarde voldoen.

Als je dan alle rijen selecteerd (subquery?) die lege velden hebben uit de rechter tabel heb je toch alle rijen die niet in de rechter voorkomen?

iets als
SQL:
1
2
3
4
5
6
7
8
9
SELECT t.* FROM
   (SELECT volgplus.code,
                 volgplus.StudentNummer,
                 osiris.Code AS osCode,
                 osiris.StudentNummer AS osStud
    FROM volgplus LEFT JOIN osiris ON ((volgplus.StudentNummer = Osiris.StudentNummer)
                                      OR (volgplus.Code = osiris.Code))
     ) AS t
WHERE ((t.osCode = Null) OR (t.osStud = Null))


Ik heb 't niet geprobeerd, maar op deze manier kun je wel subquery's uitvoeren, dus misschien even wat aanpassen, en 't zou moeten kunnen ;)

*EDIT

getest:
SQL:
1
2
3
4
5
6
7
8
9
SELECT t.*
FROM (SELECT volgplus.code,
                 volgplus.StudentNummer,
                 osiris.Code AS osCode,
                 osiris.StudentNummer AS osStud
    FROM volgplus LEFT JOIN osiris ON ((volgplus.StudentNummer = Osiris.StudentNummer)
                                      OR (volgplus.Code = osiris.Code))
     ) AS t
WHERE (((t.osCode) Is Null)) OR (((t.osStud) Is Null));

[ Voor 22% gewijzigd door bramseltje op 03-03-2004 13:27 ]


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Ik heb met veel baggeren achterhaald dat de 2e query die ik gepost had gewoon wel werkt, maar dat access er geen leuke output aan wilde geven om wat voor een onbekende reden dan ook.

Maar die 2e query werkte dus wel gewoon als ik 'm via een module aan riep (wat wel de bedoeling was).

Dus eigenlijk is het opgelost; Maar als iemand nog iets zinnigs wil posten voor een toekomstige lezer; ik houd u niet tegen.