Ich schreibe ein Skript, das die Anzahl der Zeilen für einige Tabellen ermittelt. Bei einigen Tabellen möchte ich jedoch nur die Anzahl der Zeilen ermitteln, bei denen ein Flag gesetzt ist (in diesem Fall active = 1). Gibt es eine Möglichkeit, dies in einer Abfrage zu tun?
Z.B:
Tabelle users
hat eine Spalte mit dem Namen aktiv
In der Tabelle clients
ist keine Spalte mit dem Namen active vorhanden
Ich möchte die Anzahl der Benutzer ermitteln, bei denen active = 1 ist, und möchte nur die Anzahl der Clients ermitteln.
Bevor Sie "nur harten Code" sagen, ist dies eine Abfrage, die in einem Python-Skript ausgeführt wird, das auf zahlreichen verschiedenen Datenbanken ausgeführt werden kann, und ich habe keine Möglichkeit zu wissen, welche Tabellen mein Skript auswählt und ob sie eine Spalte mit dem Namen " active
und" haben Ich würde es vorziehen, nur eine Abfrage zu haben, um alles zu erledigen, anstatt zwei separate und mich auf mysql zu verlassen, um einen Fehler zu werfen, damit ich weiß, dass ich die andere verwenden kann.
Antworten:
Mein erster Gedanke wäre, den
INFORMATION_SCHEMA
ersten zu verwenden, damit Sie wissen (in einer Abfrage für alle Tabellen in der MySQL-Instanz), welche Tabellen eineactive
Spalte haben, und diese Informationen dann verwenden, um Ihre Abfragen zu erstellen. Und dies ist wahrscheinlich der vernünftigste Ansatz.Es gibt einen anderen, kniffligen Weg, der funktioniert, egal ob die Tabelle eine solche Spalte hat oder nicht:
Getestet bei SQL-Fiddle Wie funktioniert es?
Wenn die Tabelle eine Spalte mit dem Namen hat
active
, wird die Abfrage wie folgt "übersetzt":Wenn die Tabelle keine Spalte mit dem Namen hat
active
, wird die Abfrage so "übersetzt", als ob sie Folgendes hätte:quelle
Anzahl der Clients pro Benutzer-ID mit Gesamtsumme unter Verwendung nur der
users
Tabelle:Wenn die clients-Tabelle Datensätze gelöscht hat, gehen Sie folgendermaßen vor:
Für
users
Tabellen ohneactive
Spalte:oder
Sie müssten diese Abfragen für jede Datenbank und
UNION ALL
die Ergebnisse ausführen .Wenn Sie die Datenbank INFORMATION_SCHEMA nutzen möchten, können Sie Folgendes raten:
Versuche es !!!
quelle
Ich möchte die Antwort des @ ypercubeᵀᴹ ergänzen, kann aber wegen der Einschränkungen keine Kommentare schreiben.
Wenn Sie nicht wissen, welcher Spaltenname verwendet wird, und Sie dessen Maximalwert ermitteln müssen, können Sie Folgendes tun:
quelle