Saya sedang menulis skrip yang mendapat hitungan baris untuk beberapa tabel, namun untuk beberapa tabel saya hanya ingin mendapatkan hitungan baris di mana sebuah flag ditetapkan (dalam hal ini aktif = 1). Apakah ada cara saya bisa melakukan ini dalam satu permintaan?
Misalnya:
Tabel users
memiliki kolom yang disebut aktif
Tabel clients
tidak memiliki kolom yang disebut aktif
Saya ingin mendapatkan jumlah pengguna yang aktif = 1 dan hanya mendapatkan jumlah klien.
Sebelum Anda mengatakan "hanya kode keras", ini adalah kueri yang masuk ke dalam skrip python yang dapat dijalankan pada berbagai basis data dan saya tidak memiliki cara untuk mengetahui tabel apa yang akan dipilih skrip saya dan jika ada kolom yang dipanggil active
, dan Saya lebih suka memiliki hanya satu query untuk melakukan semuanya daripada dua yang terpisah dan mengandalkan mysql untuk melempar kesalahan jadi saya tahu menggunakan yang lain.
Jawaban:
Pikiran pertama saya adalah menggunakan yang
INFORMATION_SCHEMA
pertama, sehingga Anda mengenal (dalam satu permintaan untuk semua tabel dalam contoh MySQL) tabel mana yang memilikiactive
kolom dan kemudian menggunakan info itu untuk membangun kueri Anda. Dan ini mungkin pendekatan yang paling waras.Ada satu cara lain yang rumit yang berfungsi tidak masalah apakah tabelnya memiliki atau tidak kolom seperti itu:
Diuji di SQL-Fiddle Bagaimana cara kerjanya?
Jika tabel memiliki kolom bernama
active
, kueri "diterjemahkan" seolah-olah memiliki:Jika tabel tidak memiliki nama kolom
active
, kueri "diterjemahkan" seolah-olah memiliki:sumber
Hitungan Klien Per UserID dengan Grand Total hanya menggunakan
users
tabel:Jika tabel klien memiliki catatan yang dihapus, maka lakukan ini:
Untuk
users
tabel yang tidak memilikiactive
kolom:atau
Anda harus menjalankan kueri ini terhadap setiap basis data dan
UNION ALL
hasilnya.Jika Anda ingin memanfaatkan basis data INFORMATION_SCHEMA maka ini adalah tebakan liar:
Cobalah !!!
sumber
Saya ingin menambahkan jawaban dari @ ypercubeᵀᴹ, tetapi saya tidak dapat menulis komentar karena batasannya.
Jika Anda tidak tahu nama kolom apa yang digunakan, dan Anda perlu mendapatkan nilai maksimalnya, Anda bisa melakukannya:
sumber