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

18

Saya menemukan tampilan di basis data kami hari ini di mana pernyataan pertama di mana klausa itu berada where 1 = 1. Tidakkah ini mengembalikan nilai true untuk setiap record? Mengapa seseorang menulis ini jika tidak memfilter catatan?

goric
sumber
3
Karena mereka ingin meretas situs web sombodys ;-)
Tim Schmelter

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'.

BenV
sumber
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
ern0
sumber
4

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

SchwartzE
sumber