insert met subquery ander resultaat dan subquery zelf

Pagina: 1
Acties:

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Ik heb een wat bijzonder probleem, of ik bouw simpelweg de query fout op.

Wanneer ik deze select query uitvoer, krijg ik 64 resultaten (zowel in Access als PhpMyAdmin):
SQL:
1
2
3
4
SELECT LidID FROM Ledenlijst 
WHERE CollegejaarID <> 10 
AND (LidID Not In 
(SELECT LidID FROM `Betaalde collegejaren` WHERE CollegejaarID=4));
Wil ik dit vervolgens gebruiken om die mensen te verplaatsen naar een andere tabel, dan heb ik opeens 96 ingevoegde records (aldus PhpMyAdmin). Dat doe ik dan met deze query:

SQL:
1
2
3
4
5
6
7
INSERT INTO `oud-leden` 
SELECT * FROM `ledenlijst` 
WHERE LidID In 
(SELECT LidID FROM Ledenlijst WHERE CollegejaarID <> 10 
AND 
(LidID Not In (SELECT LidID FROM `Betaalde collegejaren` WHERE CollegejaarID=4)
));


Waar zit hier nu de fout??

Anders gezegd: waarom krijg ik bij een selectiequery opeens een heel ander resultaat dan wanneer ik precies diezelfde query gebruiken voor de INSERT?

Alvast bedankt!

[ Voor 4% gewijzigd door TromboneFreakus op 20-09-2005 16:39 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Waarom gebruik je die subquery überhaupt? Werkt dit niet precies hetzelfde?
SQL:
1
2
3
4
5
INSERT INTO `oud-leden` 
SELECT * FROM `ledenlijst` 
WHERE CollegejaarID <> 10 
AND 
(LidID Not In (SELECT LidID FROM `Betaalde collegejaren` WHERE CollegejaarID=4))

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


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
-NMe- schreef op dinsdag 20 september 2005 @ 16:46:
Waarom gebruik je die subquery überhaupt? Werkt dit niet precies hetzelfde?
SQL:
1
2
3
4
5
INSERT INTO `oud-leden` 
SELECT * FROM `ledenlijst` 
WHERE CollegejaarID <> 10 
AND 
(LidID Not In (SELECT LidID FROM `Betaalde collegejaren` WHERE CollegejaarID=4))
Ik heb het even geprobeerd, maar dit geeft exact hetzelfde probleem: 96 ingevoegde records, terwijl de selectie er 64 oplevert.... :(

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Update: heb niet helemaal goed opgelet in de vergelijking Access/PhpMyAdmin => Access geeft 64 mensen terug, PhpMyAdmin 96. Dat laatste is toch wel - en dat is gelukkig! :) - consequent.

Maar dan is meer de vraag: waardoor komt het verschil in Access en PhpMyAdmin en vooral: wie heeft er nu gelijk?

Nogal bepalend of de mensen inderdaad geroyeerd moeten worden of niet...

Verwijderd

Onderzoek de gegevens van de mensen die wel in de ene maar niet in de andere query voorkomen, dan ben je er zo achter.

  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Kijk maar in de log van je database wat er precies aankomt als je gebruik maakt van de verschillende front-ends. Ik zou zelf denken dat de operator precedence van NOT verschilt tussen Access en MySQL (die is in MySQL 5.0.2 dan ook aangepast).


Maar ja, als je gebruik maakt van een database die denkt dat [] identifier quotes zijn om een database die denkt dat `` identifier quotes zijn aan te sturen en een datamodel hebt met spaties en min-tekens in je identifiers dan vraag je natuurlijk wel om moeilijkheden hè?

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Heb vanmiddag nog eens een testje gedaan en toen kwam ik toch wederom tot verschillende aantal records binnen PhpMyAdmin zelf. DUs voor de twee queries.

Gezien Access de code bevat voor bijv. het aanmaken van een incasso-bestand heb ik maar even anders opgelost: via een VBA-macro de leden verplaatsen mbv een query.

Blijft overigens wel vreemd, maar goed. Dank voor het meedenken.
Pagina: 1