[Mysql] Dezelfde basisquery met andere resultaten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • blade181
  • Registratie: Januari 2001
  • Laatst online: 16-01 12:32

blade181

Cra-cra-cracker?

Topicstarter
Ik heb een raar fenomeen.

Ik heb in principe 2 identieke tabellen, met wel verschillende data.

code:
1
2
3
4
5
6
7
8
9
ID
kostenplaatsID
divisieID
kostenplaatsID1
divisieID1
kostenplaatsID2
divisieID2
kostenplaatsID3
divisieID3

De andere tabel is ook zo opgebouwd. Bij de ene tabel zitten 146 records waar alleen de eerste 5 velden gevuld zijn. In de andere tabel zitten 78 records waarbij de eerste 7 velden gevuld zijn. Wat is nu het punt, ik wil in de ene tabel van 146 records toetsen hoeveel er voorkomen in de tabel van 78 records. Deze moeten vervolgens in de tabel van 146 records verwijderd worden. Later vul ik dan de tabel van 146 records met die van 78 records.

Ik heb een query tussen 2 tabellen. De query is zo opgebouwd:
code:
1
2
3
4
5
6
7
8
9
SELECT doorbelastingaudit3.kostenplaatsID, doorbelastingaudit3.DivisieID, 
doorbelastingaudit3.kostenplaatsID1, doorbelastingaudit3.DivisieID1, doorbelastingaudit3.kostenplaatsID2, 
doorbelastingaudit3.DivisieID2

FROM kostencalculatieaudit INNER JOIN 
doorbelastingaudit3 ON (kostencalculatieaudit.DivisieID1 = doorbelastingaudit3.DivisieID1) AND 
(kostencalculatieaudit.kostenplaatsID1 = doorbelastingaudit3.kostenplaatsID1) AND 
(kostencalculatieaudit.DivisieID = doorbelastingaudit3.DivisieID) AND 
(kostencalculatieaudit.kostenplaatsID = doorbelastingaudit3.kostenplaatsID)


De query geeft een result van 78 records. Dit betekent dus dat alle records die voorkomen (in de tabel van 78 records) ook in de tabel voorkomen van 146 records. Met dit resultaat ben ik aan de slag gegaan en heb de volgende query opgebouwd.

code:
1
2
3
4
5
DELETE kostencalculatieaudit FROM kostencalculatieaudit JOIN doorbelastingaudit3 ON 
kostencalculatieaudit.kostenplaatsID=doorbelastingaudit3.kostenplaatsID AND 
kostencalculatieaudit.divisieID=doorbelastingaudit3.divisieID AND 
kostencalculatieaudit.kostenplaatsID1=doorbelastingaudit3.kostenplaatsID1 AND 
kostencalculatieaudit.divisieID1=doorbelastingaudit3.divisieID1;


Ik krijg nu als resultaat 8 records. Vervolgens als ik de vorige query open dan is het resultaat daar 0 en zijn er ook geen vergelijkingen meer. Dat laatste is niet vreemd en kijk ik ook niet van op, maar het resultaat van 8 records is mij gewoon compleet niet duidelijk.

Dit is trouwens niet de eerste keer dat ik een resultaat van 8 records krijg want als ik het statement UPDATE.......WHERE gebruik is het resultaat ook 8 records. Kan iemand mij duidelijk maken wat ik hier verkeerd doe. De queries zijn namelijk identiek, afgezien van de select/delete statements.

Another white boy in this movie? Damn!


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Het gaat er dus alleen maar om dat het resultaat van mysql_affected_rows bij een delete query niet klopt bij een join ofzo? Misschien een bugje in bepaalde versies van MySQL? Waarom heb je het trouwens niet getest met (bijna) exact dezelfde query?

Als ik het zelf eens test:
SQL:
1
2
3
4
5
6
7
8
9
10
11
drop table if exists deltest1, deltest2;
create table deltest1 (id int primary key AUTO_INCREMENT);
insert into deltest1 values (),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),
    (),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),();
insert into deltest1 values (),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),
    (),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),();
create table deltest2 (id int primary key AUTO_INCREMENT);
insert into deltest2 values (),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),
    (),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),();
select * from deltest1 natural join deltest2;
delete deltest1 from deltest1 natural join deltest2;

... zie ik geen verschil tussen de laatste 2 in ieder geval. :)

Bij een update kan het komen doordat de oude en de nieuwe waarde gelijk zijn.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten