Toon posts:

[Access 2003] Records filteren met een Group By subquery

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb het volgende probleem:

Ik heb een tabel met oude produkten en een tabel met nieuwe produkten in een database. In de tabel met oude produkten staan zo'n 5000 records met ongeveer 25 dezelfe fabrikanten. In de tabel met nieuwe produkten staan zo'n 1000 records met 2 dezelfde fabrikanten.

Nu moet ik een query maken die in de tabel met oude produkten, alle produkten van de 2 fabrikanten die voorkomen in de nieuwe produkttabel verwijderen. De tabellen zien er ongeveer zo uit:

Tabel 1 (oude produkten):
Fabrikant Produkt
AAA Stenen
AAA Keien
AAA Water
BBB Friet
BBB Mest
BBB Kaas
CCC Hout


Tabel 2 (nieuwe produkten):
Fabrikant Produkt
AAA Groente
AAA Stieren
AAA Prei
CCC Zalm


In tabel 2 komen alleen de fabrikanten AAA en CCC voor. Nu is het de bedoeling dat alle records in tabel 1 die als fabrikant AAA en CCC hebben verwijderd worden. Ik maakte daarom de volgende query met subquery:

code:
1
DELETE * FROM produkten1 WHERE fabrikant = (SELECT fabrikant FROM produkten2 GROUP BY fabrikant)


Nu krijg ik als foutmelding: at most one record can returned by this subquery. De foutmelding spreekt boekdelen. Is er een andere manier om dit te bewerkstelligen. Of moet ik in VB een loopje maken die het fabrikant voor fabrikant doet.

Alvast bedankt,

Theo Heemskerk

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 10-05 16:41

Nick_S

++?????++ Out of Cheese Error

Je moet nog wel aangeven, met wat je de subquery wil vergelijken.

Dus:
code:
1
DELETE * FROM produkten1 WHERE fabrikant IN (SELECT DISTINCT fabrikant FROM produkten2)


En aangezien je niks doet met het groupen, kun je beter DISTINCT gebruiken. Deze geeft alle unieke records terug.

Ow, en voor je deze query gaat uitproberen, doe het eerst even met SELECT * ipv DELETE *. Dan weet je zeker dat je de goede records hebt.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Verwijderd

Topicstarter
Super dit werkt :)

Superbedankt

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Die distinct is nergens voor nodig aangezien IN gebruikt wordt.
code:
1
DELETE * FROM produkten1 WHERE fabrikant IN (SELECT fabrikant FROM produkten2)

Deze doet hetzelfde.

Who is John Galt?


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 10-05 16:41

Nick_S

++?????++ Out of Cheese Error

Ik vraag me af wat sneller is. Langer rekenen over een kleinere subset en daarna minder vergelijkingen hoeven maken, of een grotere subset en dus ook meer vergelijkingen. Of wordt dit al opgelost in je RDBMS?

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Verwijderd

Topicstarter
Nick_S schreef op dinsdag 22 februari 2005 @ 09:30:
Ik vraag me af wat sneller is. Langer rekenen over een kleinere subset en daarna minder vergelijkingen hoeven maken, of een grotere subset en dus ook meer vergelijkingen. Of wordt dit al opgelost in je RDBMS?
Ik heb het beide geprobeerd en ik kan niet echt een verschil in snelheid merken. Wat is een RDBMS eigenlijk?

  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Dat verschil in snelheid zul je ook niet zo snel merken bij die 1000 records. Doe het eerst maar eens x1000, dan kun je beter meten.

RDBMS staat voor Relationeel DataBase Management Systeem
Pagina: 1