Ich hätte gerne eine Liste der Spalten einer Tabelle, in denen mindestens ein Nicht- NULL
Dateneintrag enthalten ist.
Mit anderen Worten, ich möchte die Spaltennamen erhalten, für die im Folgenden mindestens ein Eintrag zurückgegeben wird:
SELECT DISTINCT column_name FROM table WHERE column_name IS NOT NULL
Ich habe folgendes versucht:
SELECT column_name
FROM information_schema.columns
WHERE table_name = "table_name"
AND EXISTS (
SELECT DISTINCT column_name FROM table_name WHERE column_name IS NOT NULL
)
Dies gibt aber auch die Spaltennamen zurück, in denen sich alle Einträge befinden NULL
.
Wie erhalte ich nur die Spalten mit Nichteinträgen NULL
?
Antworten:
Lassen Sie uns eine Beispieltabelle auf meinem Computer auswählen:
Bei dieser Tabelle gibt es zwei Fragen:
Diese Abfrage wird für Sie herausfinden:
Überprüfen Sie das Ergebnis dieser Abfrage für die Tabelle:
OK, wir haben zwei Listen. Was lernen wir daraus?
Wenn Sie nur nach Nicht-Null-Spalten suchen, ist dies Ihre gewünschte Abfrage:
Hier ist die Ausgabe dieser Abfrage:
Wenn Sie GROUP_CONCAT entfernen, erhalten Sie Folgendes:
Versuche es !!!
HINWEIS : Bitte beachten Sie, dass ich den Dateninhalt der tatsächlichen Tabelle nicht lesen muss. Das ist weitaus effizienter als das Lesen der gesamten Tabelle.
UPDATE 15.11.2012 13:40 EDT
Der Code aus der Antwort von @ sensware enthält
NULL
Spalten. Die ursprüngliche Frage wurde nachnon-NULL
Spalten gestellt. Ich habe den Code erweitert, um nur meine Tabelle zu testen:Hier ist die Ausgabe:
Dies ergibt NULL-Spalten. Die ursprüngliche Frage bezog sich auf Nicht-NULL-Spalten. Ich werde den Code in "Nicht-NULL" ändern. Ich mache das, indem ich die Reihenfolge der
IF..COUNT
:Lass es uns jetzt laufen lassen ...
OK, es funktioniert jetzt. Es liegt noch ein Problem vor. Die Abfrage erfordert das Lesen der gesamten Tabelle. Meine Testtabelle hat nur 117 Zeilen und 20 Spalten. Was ist mit größeren Tabellen mit Millionen von Zeilen oder Dutzenden von Spalten ? Ich werde nicht spekulieren, weil ich weiß, dass der Code um Größenordnungen schlechter wäre.
Deshalb empfehle ich meine Antwort
oder
weil der tatsächliche Dateninhalt nicht überprüft werden muss.
Der erweiterte Code, den ich erstellt habe, sollte nur für eine Tabelle verwendet werden, in der alle Spalten
NULL
Werte zulassen , was äußerst selten ist.quelle
Ich denke das wurde hier beantwortet:
/programming/12091272/find-all-those-columns-which-have-only-null-values-in-a-mysql-table
Der Code wurde unten kopiert:
quelle