[access] delete query waarom select...from...where...IN...

Pagina: 1
Acties:

  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
Ik wou mbv een delete query gegevens uit een tabel verwijderen die reeds voorkwamen in een 2de tabel (de tabellen zijn geïmporteerd vanuit een excel document, geen sleutel of relatie gedefinieerd). Met onderstaande code kan ik de gemeenschappelijke gegevens bekijken:

code:
1
2
select tabel1.* from tabel1, tabel2 where (tabel1.kolomA = tabel2.kolomA)
and (tabel1.kolomB = tabel2.kolomB)

als ik nu "select" vervang door "delete" (of in het menu kies voor delete query), dan kan ik de gemeenschappelijke gegevens wel nog bekijken, maar als ik de query effectief wil uitvoeren krijg ik de foutmelding: "Could not delete from specified tables".

Na wat rondgezocht te hebben op het net & in de help functie zou ik de eigenschap UniqueRecords op "yes" moeten zetten (menu view - properties in access). Dit gaf echter geen resultaat. Na nog wat gezocht te hebben probeerde ik volgend SQL commando:
code:
1
2
delete tabel1.* from tabel1 where (kolomA IN (select kolomA from tabel2)) AND 
(kolomB IN (select kolomB from tabel2))

Dit werkt wel! Het sql commando begrijp ik wel, maar ik begrijp niet waarom het op deze manier moet. Eén enkel sql commando is duidelijker dan zo'n genest statement.

Als laatste test maakte ik zelf één tabel aan met enkele gegevens. Als ik daar het volgende sql commando op uitvoerde, dan ging dit wel.
code:
1
 delete * from tabelC where kolomA = "x"

Weet iemand waarom dit is? En is het op te lossen op de 1ste manier? Dit omdat ik aan iemand moet gaan uitleggen hoe query's te maken met access, maar die persoon kent niets van SQL. Als ik dan zo'n geneste SQL opdracht moet gaan uitleggen gaat het nog moeilijker gaan vrees ik.

(ps. de sql code heb ik nu zelf geschreven omdat ik dat makkelijker en duidelijker vindt dan de sql code die access zelf maakt. Maar op die manier ging het ook niet)

  • KopjeThee
  • Registratie: Maart 2005
  • Niet online
Ik neem aan dat
delete table1.* from table1,table2 where ...
probeert weg te gooien uit de niet bestaande tabel: tabl1,table2, het cartetisch product van table1 en table2.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Doe het eens zo:
code:
1
2
3
4
DELETE table1
FROM table2 
WHERE table1.colA = table2.colA
AND table2.colB = table2.colB


De query die jij probeert uit te voeren (met die 2 subqueries) zal echter een ander resultaat geven als de query die ik post.
De query die ik post zal de rijen verwijderen waarvoor de 'combinaties' A en B gelijk zijn, de query die jij gepost hebt, zal dat echter niet doen denk ik.

https://fgheysels.github.io/