Discussion:
A365: zwei Nicht-Kriterien schliessen 6 statt 2 Datensätze aus, warum?
(zu alt für eine Antwort)
Forrest Gump
2021-10-20 18:21:26 UTC
Permalink
Hallo

Aus einer Abfrage resultieren 49 Datensätze. Ich möchte nun 2 bestimmte
Datensätze ausschliessen und ergänze die Abfrage entsprechend. Nun
resultieren aber 43 Datensätze statt der erwarteten 47.
Das verwirrt mich sehr. :-)

Details:

Die Where-Klausel
WHERE (((tbl_Adressen.MtglArt)=2 Or (tbl_Adressen.MtglArt)=8))
ergibt 49 Datensätze.

Soweit, so gut.

Ausschluss zweier bestimmter Datensätze aus dieser Menge:

WHERE (((tbl_Adressen.Vorname)<>"Hansjakob" And
(tbl_Adressen.Vorname)<>"Wilfried") AND ((tbl_Adressen.MtglArt)=2 Or
(tbl_Adressen.MtglArt)=8))

Entwurfsansicht:
Zeile "Kriterien", Spalte "Vorname":
Nicht "Hansjakob" Und Nicht "Wilfried"

Zeile "Kriterien", Spalte "MtglArt":
2 Oder 8

Die beiden Kriterien befinden sich auf derselben Zeile, sind also
"und"-Verknüpft.

Damit resultieren nun eben 43 statt der erwarteten 47 Datensätze.

Warum dies? Bzw. wie muss ich die Abfrage umformulieren.

Vielen Dank.
--
"Das Gute an Vietnam war, dass man immer irgendwas vorhatte."
Forrest Gump
---
Karl Donaubauer
2021-10-20 19:42:36 UTC
Permalink
Hallo!
Post by Forrest Gump
Aus einer Abfrage resultieren 49 Datensätze. Ich möchte nun 2 bestimmte
Datensätze ausschliessen und ergänze die Abfrage entsprechend. Nun
resultieren aber 43 Datensätze statt der erwarteten 47.
Das verwirrt mich sehr. :-)
Die Where-Klausel
WHERE (((tbl_Adressen.MtglArt)=2 Or (tbl_Adressen.MtglArt)=8))
ergibt 49 Datensätze.
Soweit, so gut.
WHERE (((tbl_Adressen.Vorname)<>"Hansjakob" And
(tbl_Adressen.Vorname)<>"Wilfried") AND ((tbl_Adressen.MtglArt)=2 Or
(tbl_Adressen.MtglArt)=8))
Nicht "Hansjakob" Und Nicht "Wilfried"
2 Oder 8
Die beiden Kriterien befinden sich auf derselben Zeile, sind also
"und"-Verknüpft.
Damit resultieren nun eben 43 statt der erwarteten 47 Datensätze.
Warum dies? Bzw. wie muss ich die Abfrage umformulieren.
Die Klammern gehören geändert, damit das OR richtig zieht. Reduziert auf
die notwendigen sieht man das besser:

WHERE tbl_Adressen.Vorname<>"Hansjakob" And
tbl_Adressen.Vorname<>"Wilfried"
AND (tbl_Adressen.MtglArt=2 Or tbl_Adressen.MtglArt=8)
--
Servus
Karl
*********
Access-Entwickler-Konferenz: https://www.donkarl.com/?AEK
Access DevCon: http://AccessDevCon.com
Access FAQ: https://www.donkarl.com
Forrest Gump
2021-10-20 21:25:39 UTC
Permalink
Post by Karl Donaubauer
Die Klammern gehören geändert, damit das OR richtig zieht. Reduziert auf
WHERE tbl_Adressen.Vorname<>"Hansjakob" And
tbl_Adressen.Vorname<>"Wilfried"
AND (tbl_Adressen.MtglArt=2 Or tbl_Adressen.MtglArt=8)
Vielen Dank. Ich dachte eigentlich, dass Access die Klammersetzung schon
richtig macht.
--
"Das Gute an Vietnam war, dass man immer irgendwas vorhatte."
Forrest Gump
---
Forrest Gump
2021-10-21 05:45:18 UTC
Permalink
Post by Karl Donaubauer
WHERE tbl_Adressen.Vorname<>"Hansjakob" And
tbl_Adressen.Vorname<>"Wilfried"
AND (tbl_Adressen.MtglArt=2 Or tbl_Adressen.MtglArt=8)
Seltsamerweise resultieren auch aus dieser Where-Klausel 43 Datensätze.
Ich habe die Ergebnisse verglichen (welche konkreten Datensätze fehlen)
und sehe, dass der Abfrage-Interpreter auch Datensätze aussortiert, die
leere Vornamefelder haben (null).

Ich würde erwarten, dass tbl_Adressen.Vorname<>"Hansjakob" nur
Datensätze aussortiert, wo "Hansjakob" im Vornamen steht und nicht auch
jene mit nichts (null).

Wie ist das Verhalten erklärbar?
--
"Das Gute an Vietnam war, dass man immer irgendwas vorhatte."
Forrest Gump
---
Karl Donaubauer
2021-10-21 07:58:26 UTC
Permalink
Hallo!
Post by Forrest Gump
...
Ich würde erwarten, dass tbl_Adressen.Vorname<>"Hansjakob" nur
Datensätze aussortiert, wo "Hansjakob" im Vornamen steht und nicht auch
jene mit nichts (null).
Wie ist das Verhalten erklärbar?
Wenn man Null mit etwas oder nicht etwas vergleicht, schließt man Null
aus, weil es sich seit jeher nur von einem Null-Vergleich angesprochen
fühlt.

Wenn die leeren Werte dabei sein sollen, kannst du deine
Ungleich-Kriterien um einen Null-Vergleich erweitern:

<>... OR Is Null

Servus
Karl
*********
Access-Entwickler-Konferenz: https://www.donkarl.com/?AEK
Access DevCon: http://AccessDevCon.com
Access FAQ: https://www.donkarl.com
Forrest Gump
2021-10-21 10:40:19 UTC
Permalink
Post by Karl Donaubauer
Wenn man Null mit etwas oder nicht etwas vergleicht, schließt man Null
aus, ...
Schade.
IMHO ist die Aussage "Der Feldinhalt "null" ist ungleich "Hansjakob"
wahr. Weil, da steht halt nicht *Hansjakob" drin.

Das scheint mir ein Unterschied im Denken der Informatiker und der
Nicht-Informatiker.

Forrest
--
"Das Gute an Vietnam war, dass man immer irgendwas vorhatte."
Forrest Gump
---
Karl Donaubauer
2021-10-21 13:12:10 UTC
Permalink
Hallo!
Post by Forrest Gump
Post by Karl Donaubauer
Wenn man Null mit etwas oder nicht etwas vergleicht, schließt man Null
aus, ...
Schade.
IMHO ist die Aussage "Der Feldinhalt "null" ist ungleich "Hansjakob"
wahr. Weil, da steht halt nicht *Hansjakob" drin.
Das scheint mir ein Unterschied im Denken der Informatiker und der
Nicht-Informatiker.
Naja, sagen wir, du starrst auf ein Stück vietnamesischen Dschungels,
siehst nur Blätter und Geäst, und rufst:

"Alle Vietkongs, die nicht Ho Chi Min heißen, rauskommen da!"

Die wenigsten werden dem Folge leisten. Das war zu konkret.

2. Versuch:

"Alle, die nicht Ho Chi Min heißen oder die getarnt/unbekannt/anonym
drin sein könnten, rauskommen da!"

Schon fühlen sich auch z.B. die im Kollektiv Namenlosen angesprochen und
springen ebenfalls raus. Drin bleibt jedenfalls nur Ho selber.

s.a. https://de.wikipedia.org/wiki/Nullwert

Servus
Karl
*********
Access-Entwickler-Konferenz: https://www.donkarl.com/?AEK
Access DevCon: http://AccessDevCon.com
Access FAQ: https://www.donkarl.com
Forrest Gump
2021-10-21 17:14:06 UTC
Permalink
Post by Karl Donaubauer
"Alle, die nicht Ho Chi Min heißen oder die getarnt/unbekannt/anonym
drin sein könnten, rauskommen da!"
Schon fühlen sich auch z.B. die im Kollektiv Namenlosen angesprochen und
springen ebenfalls raus. Drin bleibt jedenfalls nur Ho selber.
Danke.

Es erscheint mir halt trotzdem nicht logisch, wenn ein leeres Feld nicht
ungleich einem Wert sein soll. (Das würde ja im Umkehrschluss auch
bedeuten, dass ein leeres Feld gleich einem - beliebigen - Wert ist.)

Aber ich will Dich nicht wütend machen und Deine und meine Zeit nicht
weiter beanspruchen. Es ist halt einfach so. :-)

Forrest
--
"Das Gute an Vietnam war, dass man immer irgendwas vorhatte."
Forrest Gump
---
Loading...