Mengapa seseorang menempatkan `where 1 = 1` dalam kueri?


Jawaban:


40

Beberapa pembuat kueri dinamis menyertakan kondisi ini sehingga setiap kondisi "nyata" dapat ditambahkan dengan ANDtanpa melakukan pemeriksaan seperti if (first condition) 'WHERE' else 'AND'.


Kedengarannya aneh bahwa pembuat kueri tidak dapat menentukan apakah suatu kondisi adalah yang pertama dalam satu baris, tetapi saya pikir juga, Anda benar.
ern0

3
itu sering terjadi ketika "pembangun permintaan" adalah seseorang yang menulis kode untuk digabungkan ke pernyataan SQL dengan tangan. kadang-kadang memperkenalkan perpustakaan bangunan permintaan yang lebih formal menghilangkannya.
araqnid

1
Saya harus berurusan dengan kode "lama" seperti ini, dan itu sangat benar. Ketika Anda merakit seluruh pernyataan SQL ke dalam satu string, akan ada banyak pernyataan if / then atau case yang mungkin atau mungkin tidak terpicu. Karena Anda tidak pernah tahu apakah ada jalur kode yang diambil, TETAPI Anda memiliki DAN yang tertanam di klausa WHERE Anda (karena klausa yang secara konsisten merupakan bagian dari string), Anda perlu (a) menghapus AND yang menyinggung DAN atau ( b) cukup memberikannya disangkal logis. Menambahkan "1 = 1" lebih mudah daripada membuat ulang string dengan benar.
Avery Payne

5

Jika Anda memiliki banyak poin pembangun pernyataan SQL dalam program Anda yang menghasilkan pertanyaan serupa , Anda dapat menandai yang diperiksa dengan trik ini. Jika kalimatnya tentang menghitung, Anda dapat menggunakan kode di bawah ini sehingga Anda dapat mengeluarkan 42dari log SQL.

select count(42) from table

4

Ini memberikan situasi yang selalu benar, sehingga tidak memengaruhi hasil, tetapi Anda tahu sudah ada satu item dalam klausa WHERE.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.