de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 antik
antik
Question

Membutuhkan jumlah baris setelah pernyataan SELECT: apa pendekatan SQL yang optimal?

Saya mencoba untuk memilih kolom dari tabel tunggal (tidak ada join) dan saya membutuhkan jumlah baris, idealnya sebelum saya mulai mengambil baris. Saya telah menemukan dua pendekatan yang memberikan informasi yang saya butuhkan.

Pendekatan 1:

SELECT COUNT( my_table.my_col ) AS row_count
  FROM my_table
 WHERE my_table.foo = 'bar'

Kemudian

SELECT my_table.my_col
  FROM my_table
 WHERE my_table.foo = 'bar'

Atau Pendekatan 2

SELECT my_table.my_col, ( SELECT COUNT ( my_table.my_col )
                            FROM my_table
                           WHERE my_table.foo = 'bar' ) AS row_count
  FROM my_table
 WHERE my_table.foo = 'bar'

Saya melakukan ini karena driver SQL saya (SQL Native Client 9.0) tidak mengizinkan saya menggunakan SQLRowCount pada pernyataan SELECT tetapi saya perlu mengetahui jumlah baris dalam hasil saya untuk mengalokasikan larik sebelum menetapkan informasi ke dalamnya. Penggunaan container yang dialokasikan secara dinamis, sayangnya, bukan merupakan pilihan di area program saya ini.

Saya khawatir bahwa skenario berikut ini mungkin terjadi:

  • SELECT untuk hitungan terjadi
  • Terjadi instruksi lain, menambahkan atau menghapus baris
  • SELECT untuk data terjadi dan tiba-tiba array memiliki ukuran yang salah.
    -Dalam kasus yang lebih buruk, ini akan mencoba menulis data di luar batas array dan membuat program saya crash.

Apakah Pendekatan 2 melarang masalah ini?

Juga, Apakah salah satu dari kedua pendekatan tersebut akan lebih cepat? Jika demikian, yang mana?

Akhirnya, apakah ada pendekatan yang lebih baik yang harus saya pertimbangkan (mungkin cara untuk menginstruksikan driver untuk mengembalikan jumlah baris dalam hasil SELECT menggunakan SQLRowCount?)

Bagi mereka yang bertanya, saya menggunakan Native C++ dengan driver SQL yang disebutkan di atas (disediakan oleh Microsoft.)

32 2008-10-28T15:40:58+00:00 3
 antik
antik
Pertanyaan edit 28 Oktober 2008 в 4:37
Pemrograman
sql
odbc
sqlncli
Pertanyaan ini memiliki :value jawaban dalam bahasa Inggris, untuk membacanya masuk ke akun Anda.
Robert Gamble
Robert Gamble
28 Oktober 2008 в 3:50
2008-10-28T15:50:22+00:00
Lebih
Sumber
Sunting
#8597427

Berikut ini beberapa gagasan:

  • Gunakan Pendekatan #1 dan ubah ukuran array untuk menampung hasil tambahan atau gunakan tipe yang secara otomatis mengubah ukuran sesuai kebutuhan (Anda tidak menyebutkan bahasa apa yang Anda gunakan jadi saya tidak bisa lebih spesifik).
  • Anda dapat mengeksekusi kedua pernyataan dalam Pendekatan #1 dalam sebuah transaksi untuk menjamin jumlah yang sama kedua kali jika database Anda mendukung hal ini.
  • Saya tidak yakin apa yang Anda lakukan dengan data, tetapi jika memungkinkan untuk memproses hasil tanpa menyimpan semuanya terlebih dahulu, ini mungkin metode terbaik.
Robert Gamble
Robert Gamble
Jawaban edit 28 Oktober 2008 в 4:22
1
0
 jonnii
jonnii
28 Oktober 2008 в 3:44
2008-10-28T15:44:19+00:00
Lebih
Sumber
Sunting
#8597426

Mengapa Anda tidak memasukkan hasil Anda ke dalam vektor? Dengan begitu Anda tidak perlu mengetahui ukurannya terlebih dahulu.

0
0
 dkretz
dkretz
28 Oktober 2008 в 4:14
2008-10-28T16:14:09+00:00
Lebih
Sumber
Sunting
#8597428

Anda mungkin ingin memikirkan pola yang lebih baik untuk menangani data jenis ini.

Tidak ada driver SQL yang menghargai diri sendiri yang akan memberi tahu Anda berapa banyak baris yang akan dikembalikan oleh kueri Anda sebelum mengembalikan baris, karena jawabannya mungkin berubah (kecuali jika Anda menggunakan Transaksi, yang menciptakan masalah tersendiri.).

Jumlah baris tidak akan berubah - google untuk ACID dan SQL.

0
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 1 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi