🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.

🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst] Tabellenfeld (ja/nein) mit SQL mit Bedingungen sieben

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

[gelöst] Tabellenfeld (ja/nein) mit SQL mit Bedingungen sieben

Beitrag von Pit Zyclade » Mi 11. Okt 2023, 13:17

Bin kein Experte, mache mir von jedem erfolgreichen SQL-Befehl Notizen.

Ich habe eine Tabelle mit einem Ja-Nein-Feld in einer HSQL-DB. Eigentlich hat man dort ja drei Zustände ja/nein/nicht ausgefüllt.
Optisch kann man sehen: Häkchen für ja, - für nein und leeres Feld für noch keine Entscheidung.

Nun möchte ich diese Spalte mit SQL abfragen und ggf. modifizieren.
Welche drei Optionen habe ich denn da?

A) ... WHERE "JaFeld" = TRUE
oder
... WHERE "JaFeld" = 1
liefert mir alle Datensätze, bei denen ein Häkchen (also ja) besteht
oder
B) ... WHERE NOT "JaFeld" = TRUE
oder
... WHERE "JaFeld" = ' '
liefert mir alle Datensätze, bei denen das Feld leer ist
oder
C) Hier hapert es bei mir. Wie kann ich die Datensätze sieben, bei denen ein - angezeigt wird?



Wer kann mir helfen?
Zuletzt geändert von Pit Zyclade am Do 12. Okt 2023, 08:33, insgesamt 1-mal geändert.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: Tabellenfeld (ja/nein) mit SQL mit Bedingungen sieben

Beitrag von Pit Zyclade » Do 12. Okt 2023, 08:30

C) ... NOT (WHERE "JaFeld" = 1 OR "JaFeld" = ' ')

liefert tatsächlich nur die Datensätze mit - im JaFeld.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

siemer
Beiträge: 1
Registriert: Fr 13. Okt 2023, 17:08

Re: [gelöst] Tabellenfeld (ja/nein) mit SQL mit Bedingungen sieben

Beitrag von siemer » Fr 13. Okt 2023, 17:55

Total umständlich und zum Teil falsch?! Richtig wären:

WHERE "JaFeld" = TRUE
WHERE "JaFeld" = FALSE
WHERE "JaFeld" IS NULL

Und nun was die komischen Sachen machen (oder wie ich sie verstehe):

Bei A): WHERE "JaFeld" = 1

da wird ein boolesches Feld mit einem Integer verglichen. Da werden die Werte erst umgewandelt, damit man sie vergleichen kann. Wie genau hängt von der Implementierung ab (habe HSQLDB gerade nicht vor mir). Häufig wird 0 zu FALSE gemacht und alles andere zu TRUE. Jetzt hat man zwei boolesche Werte, die man vergleichen kann.

(Bei SQLite ist nur 1 gleich TRUE. 2 und größer sind z.B. weder TRUE noch FALSE... daher kann man hier ordentlich auf die Schnauze fallen.)

Vergleiche mit NULL sind immer NULL, daher:
NULL = FALSE -> NULL
NULL = TRUE -> NULL
NOT NULL -> NULL

Und:
NULL IS NULL -> TRUE
NULL IS NOT NULL -> FALSE
NULL IS (NOT NULL) -> TRUE
(NOT NULL) IS NULL -> TRUE
NOT NULL IS NULL -> FALSE

Der WHERE-Teil muss TRUE sein, damit er zuschlägt. Bei FALSE (klar) und bei NULL (vielleicht nicht ganz so klar) schlägt er nicht an.


Bei B): WHERE NOT "JaFeld" = TRUE

"JaFeld": TRUE --> FALSE
"JaFeld": FALSE --> TRUE
"JaFeld": NULL --> NULL

Schlägt also nur an, wenn "JaFeld" FALSE ist. Ich verstehe hier nicht, warum er bei dir die NULL-Zeilen zeigen soll.

Bei B): WHERE "JaFeld" = ''

Keine Ahnung zu was HSQLDB '' konvertiert. Kann man Probieren mit:

SELECT 3;
(um zu sehen, ob 3 zurückkommt) und
SELECT NULL;
(um zu sehen wie NULL angezeigt wird) und
SELECT TRUE = '';
SELECT FALSE = '';
SELECT NULL = '';

[Das geht bei SQLite. Ohne Tabelle nimmt er eine Tabelle mit einer Zeile aus dem Nichts. Falls das nicht geht, dann ändern zu SELECT 3 FROM tabelle LIMIT 1; etc.]

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: [gelöst] Tabellenfeld (ja/nein) mit SQL mit Bedingungen sieben

Beitrag von RobertG » Sa 14. Okt 2023, 07:35

Pit Zyclade hat geschrieben:
Mi 11. Okt 2023, 13:17
Optisch kann man sehen: Häkchen für ja, - für nein und leeres Feld für noch keine Entscheidung.
Das "leere Feld" ist 'nein' (False), das Feld mit dem "-" ist NULL. Das merkst Du spätestens, wenn Du so ein feld einer bestehenden Tabelle mit Daten hinzufügst. Da werden bei allen Datensätzen dann Felder mit "-" angezeigt.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: [gelöst] Tabellenfeld (ja/nein) mit SQL mit Bedingungen sieben

Beitrag von Pit Zyclade » Sa 14. Okt 2023, 09:10

...
Schlägt also nur an, wenn "JaFeld" FALSE ist. Ich verstehe hier nicht, warum er bei dir die NULL-Zeilen zeigen soll.
...
[/quote]

Ganz einfach, weil eine Tabelle OHNE Einträge in der "JaFeld"-Spalte leer aussehen soll und erst wenn ich ja eintrage ein Häkchen erhalten soll. Die beiden schwarz dominierten Zellen mit Häkchen bzw. minus kann man fast nicht unterscheiden auf die Schnelle.
jaFeld1.jpg
jaFeld1.jpg (9.62 KiB) 3616 mal betrachtet
siemer hat geschrieben:
Fr 13. Okt 2023, 17:55

Ich danke für die Diskussion, speziell RobertG.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: [gelöst] Tabellenfeld (ja/nein) mit SQL mit Bedingungen sieben

Beitrag von Pit Zyclade » Sa 14. Okt 2023, 10:58

RobertG hat geschrieben:
Sa 14. Okt 2023, 07:35
Pit Zyclade hat geschrieben:
Mi 11. Okt 2023, 13:17
Optisch kann man sehen: Häkchen für ja, - für nein und leeres Feld für noch keine Entscheidung.
Das "leere Feld" ist 'nein' (False), das Feld mit dem "-" ist NULL. Das merkst Du spätestens, wenn Du so ein feld einer bestehenden Tabelle mit Daten hinzufügst. Da werden bei allen Datensätzen dann Felder mit "-" angezeigt.
Das ist Konvention, da kann man nichts machen,
Aber es ist nicht logisch. Wenn ich ein Feld hinzufüge, dann sollte es noch gar keine Entscheidung haben also "leer" sein. So hätte ich das entworfen, wenn ich was zu sagen gehabt hätte.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: [gelöst] Tabellenfeld (ja/nein) mit SQL mit Bedingungen sieben

Beitrag von F3K Total » Sa 14. Okt 2023, 13:25

Pit Zyclade hat geschrieben:
Sa 14. Okt 2023, 10:58
dann sollte es noch gar keine Entscheidung haben also "leer" sein
Moin, das muss ein BUG sein, obwohl ich "NULL" als DEFAULT-WERT eingestellt habe:

Code: Alles auswählen

CREATE TABLE "Tabelle1" ("ID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,"JANEIN" BOOLEAN DEFAULT NULL,"TEXT" VARCHAR(50))
erzeugt LO diese INSERT-Statements, setzt den Wert also auf FALSE:

Code: Alles auswählen

INSERT INTO "Tabelle1" VALUES(0,FALSE,'ww')
INSERT INTO "Tabelle1" VALUES(1,FALSE,'ff')
Wenn ich diesen Befehl ausführe:

Code: Alles auswählen

INSERT INTO "Tabelle1"("TEXT") SELECT "TEXT" FROM "Tabelle1"
wird wirklich der DEFAULT-WERT NULL gesetzt:
PIT2.png
PIT2.png (3.83 KiB) 3604 mal betrachtet
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 829
Registriert: Fr 28. Mär 2014, 10:41

Re: [gelöst] Tabellenfeld (ja/nein) mit SQL mit Bedingungen sieben

Beitrag von Freischreiber » Sa 14. Okt 2023, 13:59

Das hatten wir schon mal. Ob es drei Zustände gibt oder nur zwei, hängt davon ab, ob die Eingabe erforderlich ist oder nicht, siehe hier:
viewtopic.php?t=14422

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten