Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: JU299 am Mai 06, 2024, 16:21:07

Titel: Kriterium falsch ausgewertet
Beitrag von: JU299 am Mai 06, 2024, 16:21:07
Hallo Zusammen,
ich habe folgende Abfrage, die auf nur einer Tabelle beruht:

SELECT tbl_hunde.name_ahnentafel_voll, tbl_hunde.name_besitzer_ruf, tbl_hunde.geschlecht, tbl_hunde.wurftag, tbl_hunde.fellfarbe, tbl_hunde.chip, tbl_hunde.eigentuemer, tbl_hunde.zucht_raus, tbl_hunde.todestag, tbl_hunde.zucht_raus_grund, tbl_hunde.zucht
FROM tbl_hunde
WHERE (((tbl_hunde.eigentuemer)=1) AND (Not (tbl_hunde.zucht_raus_grund)="Abgabe") AND ((tbl_hunde.zucht)=Yes));

Meine Frage ist nun folgende:
Wenn ich diese Abfrage ausführe, werden mir 4 Datensätze zu wenig angezeigt. Diese 4 DS haben eines gemeinsam:
Das Feld "zucht_raus_grund" hat den Wert Ist Null. Wenn ich das Kriterium in o.a. Abfrage auf Ist Null ändere, werden mir diese 4 DS auch angezeigt.
Der Eintrag in genanntes Felde passiert über ein Kombinationsfeld, dessen Werte ich manuell festgelegt habe.
Im entsprechenden Tabellenentwurf ist dieses Feld ein reines Textfeld, also kein Nachschlage-Assistent.
Nehme ich das Kriterium in der Abfrage für dieses Feld raus, bekomme ich alle DS angezeigt, wie ich sie erwarte.

Sieht jemand meinen (Denk)-Fehler?
Danke und Gruß
Titel: Re: Kriterium falsch ausgewertet
Beitrag von: JU299 am Mai 06, 2024, 16:32:24
Nachtrag:
Habe gerade festgestellt, dass Access den Kriteriumsausdruck von sich aus geändert hat.

Von mir eingetragen:
Nicht "Abgabe"

von Access geändert auf:
<>"Abgabe"

Ich dachte, "<>" wird nur für Zahlen, Datum und Währung verwendet.

Danke
Titel: Re: Kriterium falsch ausgewertet
Beitrag von: PhilS am Mai 06, 2024, 17:20:55
Zitat von: JU299 am Mai 06, 2024, 16:21:07Wenn ich diese Abfrage ausführe, werden mir 4 Datensätze zu wenig angezeigt. Diese 4 DS haben eines gemeinsam:
Das Feld "zucht_raus_grund" hat den Wert Ist Null. Wenn ich das Kriterium in o.a. Abfrage auf Ist Null ändere, werden mir diese 4 DS auch angezeigt.
NULL bedeutet undefiniert und muss bei Kriterien gesondert behandelt werden.

... AND (tbl_hunde.zucht_raus_grund <> 'Abgabe' OR tbl_hunde.zucht_raus_grund IS NULL) ...
Ich habe alle unnötigen Klammern entfernt. Die Klammern, die noch da sind, sind erforderlich um das gewünschte Ergebnis zu erhalten.

Zitat von: JU299 am Mai 06, 2024, 16:32:24Ich dachte, "<>" wird nur für Zahlen, Datum und Währung verwendet.
Man kann >, <, oder <> auch für Text verwenden. Größer-/Kleiner-Vergleiche werden dann auf Basis der Sortierreihenfolge ausgewertet. <> ist einfach ungleich und hat denselben Effekt, wie NICHT =.
Titel: Re: Kriterium falsch ausgewertet
Beitrag von: JU299 am Mai 06, 2024, 17:44:02
Hallo Phil,
danke für deine Antwort.
Ich verstehe deinen Code. Er zeigt auch alle geforderten DS an.

Ich verstehe jedoch nicht, warum in meinem Versuch alle DS verloren gingen, die NULL waren.
Das würde mich noch interessieren. Ich mag es, wenn ich Sachverhalte verstehen kann.

Gruß Jörg
Titel: Re: Kriterium falsch ausgewertet
Beitrag von: MzKlMu am Mai 06, 2024, 18:06:23
Hallo,
NULL (=Nix) bedarf immer einer besonderen Behandlung weil NULL nicht mit etwas verglichen werden kann.

Zu NICHT und <>

Nicht ist eigentlich nicht vollständig. Eigentlich solle es NICHT WIE heißen und das wird auch nicht zu <> geändert.
Titel: Re: Kriterium falsch ausgewertet
Beitrag von: ebs17 am Mai 06, 2024, 19:21:28
Zur Vertiefung:
Die dreiwertige Logik von SQL (https://modern-sql.com/de/konzept/dreiwertige-logik)