Biasanya, jika kondisi tidak diperlukan dalam pernyataan kueri kami, kami tidak menggunakan WHEREklausa. Tetapi saya telah melihat WHERE 1klausa yang digunakan di banyak tempat, bahkan di mana kondisi lain tidak ada.
Pada dasarnya ini hanya untuk kenyamanan programmer karena Anda hanya dapat menambahkan kondisi tambahan dengan AND...setelah itu dan tidak berdampak pada waktu eksekusi.
Catatan yang WHERE 1identik dengan WHERE 1=1; keduanya berarti WHERE TRUEtetapi yang pertama ditolak oleh banyak sistem manajemen basis data karena tidak benar-benar menjadi boolean.
Penggunaan utama saya adalah membuatnya lebih mudah untuk mengomentari hal-hal selama pengembangan kueri. Saya memimpin dengan ,'dan and':
SELECT
A
-- ,B,C
,D
-- ,EFROMTABLEWHERE1=1-- and B='This'and C='That'-- and D is not null
Juga membuatnya lebih mudah untuk secara pemrograman menangani hal-hal sampai akhir.
this ="SELECT * "
this +="FROM TABLE "
this +="WHERE 1=1 "ifuser chooses option a then this +="and A is not null "ifuser chooses option b then this +="and B is not null "ifuser chooses option b then this +="and C is not null "ifuser chooses option b then this +="and D is not null "
Kalau tidak, Anda harus memenuhi syarat opsi pertama ... dan minta setiap opsi berikut memeriksa opsi sebelumnya. Bagaimana jika pengguna hanya memilih Opsi D pada contoh sebelumnya? Anda harus memastikan bahwa if A, B and C aren't chosenkemudian gunakan yang WHERElain gunakan and. Dengan =di awal, Anda bisa langsung menampar kualifikasi hingga akhir pernyataan.
Dan Anda menulis kode seperti 1980 dalam bahasa tanpa orientasi objek, sebelum ada yang datang dengan ide generator sql berbasis objek?
TomTom
Saya menulis codemirip dengan blok pertama di SSMS atau alat kueri serupa. Meneliti kumpulan data dan mendapatkan hasil yang tepat sebelum dimasukkan ke dalam alat pelaporan (seperti Crystal Reports) untuk pengguna akhir. Blok kedua adalah apa yang saya lihat dilakukan orang lain, karena pekerjaan saya belum terlalu banyak tentang akses sql mentah. Saya sudah memecahkan kode serupa orang lain dan bisa mengerti alasannya. (Kode berada di VB, C # dan PHP).
WernerCD
10
Kenapa kita melakukannya?
Pembuatan kode dinamis yang ditulis oleh programmer yang tidak terlalu kompeten muncul di benak saya.
Hasilkan SELECT .... DIMANA dan kemudian Anda harus memiliki SESUATU .... jadi alih-alih menambahkan WHERE hanya bila diperlukan, mereka menambahkan kondisi yang tidak terbatas ketika tidak ada. Terlihat itu - bertanggung jawab untuk memecat "spesialis".
Atau cowok itu hanya hal-hal DI MANA adalah wajib;)
Saya sedang memprogram banyak fungsi yang didefinisikan pengguna dalam C ++ / C untuk PostgreSQL yang digunakan oleh orang lain di perusahaan besar (10K + orang). Fungsi saya memiliki whereparameter opsional : jika tidak ada nilai yang diberikan, klausa itu tidak digunakan. Ini secara eksplisit didokumentasikan. Sayangnya, tidak ada yang menggunakan fitur ini dan semua orang yang hanya menyediakan where 1=1klausa. Secara teoritis ini tampaknya tidak bijaksana, hampir semua pengoptimal permintaan mengesampingkan jenis pernyataan ini. Dan sulit untuk mendidik 10 ribu orang.
Tidak ada yang pernah memanggil UDF Anda WHERE 1=1; DROP TABLE CUSTOMERS?
Twinkles
Namun, saya tidak dapat menemukan konsep di balik menggunakan klausa Where 1. Perlu lebih banyak klarifikasi? Karena saya tidak mendapatkan perbaikan dalam waktu eksekusi.
ursitesion
Ini tidak ada hubungannya dengan waktu eksekusi. Itu harus dilakukan dengan budaya bagaimana orang memprogram. Terkadang kode Anda (diprogram oleh orang-orang TI) digunakan oleh para insinyur. Orang-orang ini memiliki cara mereka sendiri untuk berpikir dan menjalankan kode Anda
arthur
@Twinkles: ini jelas merupakan masalah yang menarik. Ada beberapa poin poin di sini yang perlu diperhatikan. (i) basis data hanya dapat dibaca untuk UDF (ii) Fungsi saya bergabung dengan beberapa grup tabel dengan banyak hal dan untuk memperburuk keadaan menggunakan fungsi penyimpanan data pergudangan data. Ini membuatnya sulit untuk menjatuhkan apa pun, meskipun bukan tidak mungkin, (iii) UDF dimaksudkan untuk kode pra-produksi. Yang berarti bahwa itu tidak pernah masuk ke produksi: jika fungsi bertahan tantangan departemen lain sepenuhnya menulis ulang semua yang kami program
arthur
4
Sebenarnya cukup mudah untuk mendidik 10.000 orang. Buat aplikasi gagal ketika mereka melakukan kesalahan. Mereka akan segera berhenti melakukan kesalahan.
Jasmine
2
Menggunakan "where 1 = 1" mengurangi kompleksitas kode yang diperlukan dalam sql dinamis 'di mana' pembuatan klausa. Jika tidak, saat membuat klausa 'di mana' Anda perlu memeriksa apakah ini adalah komponen pertama untuk setiap komponen yang ditambahkan. Ini adalah pola kode sederhana untuk mengurangi kompleksitas kode dan mengurangi kompleksitas kode, jika memungkinkan, hampir selalu merupakan keputusan yang tepat.
code
mirip dengan blok pertama di SSMS atau alat kueri serupa. Meneliti kumpulan data dan mendapatkan hasil yang tepat sebelum dimasukkan ke dalam alat pelaporan (seperti Crystal Reports) untuk pengguna akhir. Blok kedua adalah apa yang saya lihat dilakukan orang lain, karena pekerjaan saya belum terlalu banyak tentang akses sql mentah. Saya sudah memecahkan kode serupa orang lain dan bisa mengerti alasannya. (Kode berada di VB, C # dan PHP).Pembuatan kode dinamis yang ditulis oleh programmer yang tidak terlalu kompeten muncul di benak saya.
Hasilkan SELECT .... DIMANA dan kemudian Anda harus memiliki SESUATU .... jadi alih-alih menambahkan WHERE hanya bila diperlukan, mereka menambahkan kondisi yang tidak terbatas ketika tidak ada. Terlihat itu - bertanggung jawab untuk memecat "spesialis".
Atau cowok itu hanya hal-hal DI MANA adalah wajib;)
Ada lagi yang gagal kulihat.
sumber
Saya sedang memprogram banyak fungsi yang didefinisikan pengguna dalam C ++ / C untuk PostgreSQL yang digunakan oleh orang lain di perusahaan besar (10K + orang). Fungsi saya memiliki
where
parameter opsional : jika tidak ada nilai yang diberikan, klausa itu tidak digunakan. Ini secara eksplisit didokumentasikan. Sayangnya, tidak ada yang menggunakan fitur ini dan semua orang yang hanya menyediakanwhere 1=1
klausa. Secara teoritis ini tampaknya tidak bijaksana, hampir semua pengoptimal permintaan mengesampingkan jenis pernyataan ini. Dan sulit untuk mendidik 10 ribu orang.sumber
WHERE 1=1; DROP TABLE CUSTOMERS
?Menggunakan "where 1 = 1" mengurangi kompleksitas kode yang diperlukan dalam sql dinamis 'di mana' pembuatan klausa. Jika tidak, saat membuat klausa 'di mana' Anda perlu memeriksa apakah ini adalah komponen pertama untuk setiap komponen yang ditambahkan. Ini adalah pola kode sederhana untuk mengurangi kompleksitas kode dan mengurangi kompleksitas kode, jika memungkinkan, hampir selalu merupakan keputusan yang tepat.
sumber
Ini dia ... dari sudut pandang pemrograman, satu penggunaan 1 = 1 ...
Dalam situasi seperti ini ketika saya perlu membuat kueri saat run time dan bisa pendek atau panjang, saya menggunakan 'where 1 = 1 AND'
Buat semuanya lebih mudah
sumber