SQL Anzahl von leeren Spalten bestimmen
joah.
- datenbank
0 Bert Randolf0 joah.0 Bert Randolf0 Michael
0 Ilja
0 Tom0 Ilja
Hallo!
Ich habe eine Tabelle PERSONEN mit sagen wir 30 Spalten, die teilweise leer sein können z.B. Fax oder Handy oder Email Adresse.
Nun möchte ich schauen ob ein Resultat vollständig ist, bzw. wieviele Leerspalten da sind.
Ist das möglich?
Wenn ja, wie?
Danke für eure Hilfe.
Joah.
Hallo,
eventuell select count(*) from dingens where (spalte1='') or (spalte2='') or usw.
Bert
Hallo,
eventuell select count(*) from dingens where (spalte1='') or (spalte2='') or usw.
Bert
Hi,
ja das hab ich auch schon überlegt, aber das wird bei knapp 20-30 Colums ziemlich heftig :)
Hallo,
ja das hab ich auch schon überlegt, aber das wird bei knapp 20-30 Colums ziemlich heftig :)
stimmt.
Bert
ja das hab ich auch schon überlegt, aber das wird bei knapp 20-30 Colums ziemlich heftig :)
Normalerweise sorgt man bei einem sauberen Datenbankhandling dafür, dass Muss-(Eingabe)-Felder vor einem Insert auch sinnvoll belegt werden. Eine Abfrage in der Form, wie du sie in Erfahrung bringen willst, hätte dann eigentlich nur Sinn, wenn du im Zuge einer Reorganisation der Daten generelle Check-Abfragen durchführen willst, um Konsistenzen zu überprüfen.
Michael
yo,
eventuell select count(*) from dingens where (spalte1='') or (spalte2='') or usw.
damit zählt man nicht die anzahl der leeren spalten eines datensatzes, sondern nur die anzahl der datensätze, die mindestens eine leere spalte haben. desweiteren wurde ich den ausdruck IS NULL benutzen.
Ilja
hiphop,
stimmt, das passiert wenn man folgendes überliest:
bzw. wieviele Leerspalten da sind.
Bert
Hello,
Ich habe eine Tabelle PERSONEN mit sagen wir 30 Spalten, die teilweise leer sein können z.B. Fax oder Handy oder Email Adresse.
Da muss man wenigstens _eine_ zusätzliche Tabelle aufmachen, ggf. sogar pro Typ eine.
Und dann gibt es auch keine leeren Datensätze mehr.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
o,
Da muss man wenigstens _eine_ zusätzliche Tabelle aufmachen, ggf. sogar pro Typ eine.
muss ist das falsche wort. jeder kann sein daten-design seinen ansprüchen anpassen. insofern ist das schon ganz ok, was er macht. einzig und allein eine unbegrentzte anzahl von verschiedenen telefonnummern kann er damit nicht abbilden. aber das will er eventuell auch gar nicht.
Und dann gibt es auch keine leeren Datensätze mehr.
du meinst wohl leere datenfelder.
Ilja
Hello,
Und dann gibt es auch keine leeren Datensätze mehr.
du meinst wohl leere datenfelder.
Nein, ich meine Datensätze.
Nach der Normalisierung wird die Feldgruppe bzw. das Feld zu einem eigenen Datensatz, der über Schlüssel eine Relation zum Originaldatensatz unterhält.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
yo,
Nein, ich meine Datensätze.
es geht im wohl weniger darum, dass alle felder eines datensatzes leer sind, sondern nur bestimmte felder. und von diesen leeren feldern will er die anzahl eines datensatzes.
Ilja
Hello,
Nein, ich meine Datensätze.
es geht im wohl weniger darum, dass alle felder eines datensatzes leer sind, sondern nur bestimmte felder. und von diesen leeren feldern will er die anzahl eines datensatzes.
Das habe ich schon begriffen.
Da das Thema der horizontalen Abfrage aber schon öfter vorkam und mich auch schon öfter interessiert aht, habe ich ben vorgeschlagen, ggf. das Design zu ändern. Die betroffenen Felder eines Datensatzes (die meisten leer sind) werden in Zeilen einer neuen Tabelle verwandelt. Da können die leeren dann wegfallen.
Solange sie noch im Originaldatansatz sthen, wir der wohl nicht drum herum kommen, eine umfangreicheres Abfrage zu machen. Man könnte z.B. Bit-Flags sezten für jedes gefüllte Feld. Wenn dann alle leer sind, hat die Zeile eben den Wert 0.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
yo,
Die betroffenen Felder eines Datensatzes (die meisten leer sind) werden in Zeilen einer neuen Tabelle verwandelt. Da können die leeren dann wegfallen.
dann fallen aber nicht leere datensätze weg, sondern leere felder.
Ilja
Hello,
Die betroffenen Felder eines Datensatzes (die meisten leer sind) werden in Zeilen einer neuen Tabelle verwandelt. Da können die leeren dann wegfallen.
dann fallen aber nicht leere datensätze weg, sondern leere felder.
Willst Du mich jetzt ärgern?
In der neuen Tabelle werden die Spalten zu Zeilen, also die Felder zu Datensätzen. Und die leeren (Datensätze) können dann wegfallen.
In der alten Tabelle fällt aber die ganze Spalte(ngruppe) weg, also nicht nicht nur die leeren Felder, sondern alle (die zur Spalte gehören).
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
yo,
Willst Du mich jetzt ärgern?
nah
Und die leeren (Datensätze) können dann wegfallen.
ich würde nicht von wegfallen sprechen, weil es sie einfach nie geben wird. und was es nicht gibt, das kann auch nicht wegfallen.
Ilja
Hello,
Und die leeren (Datensätze) können dann wegfallen.
ich würde nicht von wegfallen sprechen, weil es sie einfach nie geben wird. und was es nicht gibt, das kann auch nicht wegfallen.
Du willst mich doch noch etwas ärgern heute ;-P
Wenn ich das alte Format ins neue transformiere, dann sind die leeren Felder noch da und werden zu Datensätzen. In der eigenen Tabelle fallen die dann aber weg, weil man sie nicht braucht und insbesondere der Wegfall keinen Datenverlust darstellt.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
yo,
Wenn ich das alte Format ins neue transformiere, dann sind die leeren Felder noch da und werden zu Datensätzen. In der eigenen Tabelle fallen die dann aber weg, weil man sie nicht braucht und insbesondere der Wegfall keinen Datenverlust darstellt.
vielleicht würdest du das so machen. ich würde aber diese datensätze bei einer transformation erst gar nicht in die neuen tabellen einfügen. technisch geshen stellt das überhaupt kein problem da. warum sollte ich datensätze erst in eine tabelle schreiben, um sie anschließend zu löschen ?
Ilja
yo,
Wenn ja, wie?
du musst dazu alle felder, die NULL sein könnten, "per hand" aufsummieren, sprich nach der SELECT Klausel eine 1 addieren, wenn das Feld NULL ist und 0 addieren, wenn es nicht NULL ist. dafür gibt es unter mysql bestimmt eine funktion. heisst glaube ich ifnull(), bin mir aber nicht sicher. aber in prinzip sieht das so aus.
SELECT ifnull(spalte3, 1, 0) + ifnull(spalte4, 1, 0) + ifnull(spalte7, 1, 0) .... AS 'Anzahl NULL Felder'
FROM tabelle
Ilja