Uitleg over het verschil tussen deze twee query opties in MS Access.
In het eigenschappen venster van een query zijn twee opties, Unieke Waarden en Unieke Records. Standaard staat de waarde voor beiden op Nee. Deze leveren soms dezelfde waarden op, maar er zijn significante verschillen wanneer je een van beide op Ja zet. Verder kun je niet beide waarden op Ja zetten.
Deze eigenschappen corresponderen met respectievelijk de SQL opdrachten
DISTINCT en DISTINCTROW.
Standaard, wanneer beide eigenschappen dus Nee zijn, worden alle records getoond die aan de queryvoorwaarden voldoen.
Unieke Waarden (DISTINCT in SQL) controleert alleen de uitvoervelden van de query en verwijdert daarna de dubbele rijen. Bij meerdere uitvoervelden moet de combinatie van alle uitvoervelden uniek zijn.
Unieke Records (DISTINCTROW in SQL) daarentegen controleert alle velden in de tabel die wordt opgevraagd en verwijdert duplicaten. De getoonde records moeten uniek zijn op basis van alle velden in de onderliggende tabellen en niet alleen de velden in de query.
Verdere uitleg via een Voorbeeld met een eenvoudige database “Voorbeeld_Uniek.accdb”. Deze bevat twee tabellen:
Figure 1: Tabel Klanten.
Figure 2: Tabel Orders.
Tussen de tabellen is een een-op-veel relatie van Klanten.Klantnr > Orders.Klantnr.
Zoals je ziet zijn er twee verschillende klanten met dezelfde naam voor Bedrijf. In de query’s hierna wordt steeds deze naam getoond voor de drie verschillende mogelijkheden.
Ontwerp
Onder deze naam is een query gemaakt waar beide tabellen aan zijn toegevoegd. Het ontwerpvenster ziet er als volgt uit:
Figure 3: Ontwerp query Klanten standaard.
Figure 4: Eigenschappen query Klanten standaard.
Wanneer je met SQL werkt, dan is de opdracht:
SELECT Klanten.Bedrijf
FROM Klanten
INNER JOIN Orders ON Klanten.Klantnr = Orders.Klantnr;
RESULTAAT
Figure 5: Vier rijen, voor elke klantorder is er een rij, alle records worden getoond.
Ontwerp
In het Eigenschappenvenster wordt
Unieke waarden = Ja
.
Figure 6: Ontwerp qry Klanten unieke waarden.
Wanneer je met SQL werkt, dan is de opdracht:
SELECT DISTINCT Klanten.Bedrijf
FROM Klanten
INNER JOIN Orders ON Klanten.Klantnr = Orders.Klantnr;
Resultaat
Figure 7: Twee unieke rijen, de resultaten worden beperkt tot unieke waarden in het uitvoerveld.
Ontwerp
In het Eigenschappenvenster wordt
Unieke records = Ja
.
Figure 8: Ontwerp qry Klanten unieke records.
Wanneer je met SQL werkt, dan is de opdracht:
SELECT DISTINCTROW Klanten.Bedrijf
FROM Klanten
INNER JOIN Orders ON Klanten.Klantnr = Orders.Klantnr;
Resultaat
Figure 9: Drie rijen, want de resultaten in alle onderliggende tabellen moeten uniek zijn, dus niet de uitvoervelden.
Je ziet hier twee keer “Jansen BV”. Weliswaar is dat niet uniek in het uitvoerveld, maar ze zijn uniek omdat de ene in Amsterdam zit en de andere in Londen.
Wanneer je zelf met deze datase wilt werken dan kun je deze hier downloaden: Database Voorbeeld_Uniek