Piszę skrypt, który pobiera liczbę wierszy dla kilku tabel, jednak dla niektórych tabel chcę uzyskać tylko liczbę wierszy, w których ustawiona jest flaga (w tym przypadku aktywna = 1). Czy mogę to zrobić w jednym zapytaniu?
Na przykład:
Tabela users
ma kolumnę o nazwie aktywna
Tabela clients
nie ma kolumny o nazwie aktywnej
Chcę uzyskać liczbę użytkowników, których aktywność = 1, i po prostu uzyskać liczbę klientów.
Zanim powiesz „po prostu twardy kod”, jest to zapytanie wchodzące w skład skryptu Pythona, które można uruchomić w wielu różnych bazach danych, a ja nie mam pojęcia, jakie tabele wybierze mój skrypt i czy mają kolumnę o nazwie active
, i Wolę mieć tylko jedno zapytanie, aby zrobić to wszystko zamiast dwóch osobnych i polegać na mysql, aby zgłosić błąd, więc wiem, że mogę użyć drugiego.
Odpowiedzi:
Moją pierwszą myślą byłoby użycie
INFORMATION_SCHEMA
pierwszej, abyś wiedział (w jednym zapytaniu dla wszystkich tabel w instancji MySQL), które tabele mająactive
kolumnę, a następnie wykorzystał te informacje do zbudowania twoich zapytań. I to jest chyba najbardziej rozsądne podejście.Jest jeszcze jeden, trudny sposób, który działa niezależnie od tego, czy tabela ma taką kolumnę, czy nie:
Testowane w SQL-Fiddle Jak to działa?
Jeśli tabela ma nazwę kolumny
active
, zapytanie jest „tłumaczone” tak, jakby miało:Jeśli tabela nie ma nazwanej kolumny
active
, zapytanie jest „tłumaczone” tak, jakby miało:źródło
Liczba klientów na identyfikator użytkownika z sumą całkowitą przy użyciu tylko
users
tabeli:Jeśli tabela klientów usunęła rekordy, wykonaj następujące czynności:
W przypadku
users
tabel, które nie mająactive
kolumny:lub
Musisz uruchomić te zapytania dla każdej bazy danych i
UNION ALL
wyników.Jeśli chcesz wykorzystać bazę danych INFORMACJE_SCHEMA, oto zgadywanie:
Spróbuj !!!
źródło
Chciałbym uzupełnić odpowiedź na @ ypercubeᵀᴹ, ale nie mogę pisać komentarzy z powodu ograniczeń.
Jeśli nie wiesz, jaka nazwa kolumny jest używana i musisz uzyskać jej maksymalną wartość, możesz to zrobić:
źródło