Birisi neden bir sorguya `` 1 = 1 '' koysun?


18

Bugün veritabanımızda nerede maddede ilk ifadenin olduğu bir görünüme rastladım where 1 = 1. Bu, her kayıt için doğru olmamalı mı? Birisi herhangi bir kaydı filtrelemiyorsa bunu neden yazsın?


Burada cevaplandı
Gaius

3
Çünkü sombodys web sitesini kesmek istiyorlar ;-)
Tim Schmelter

Yanıtlar:


40

Bazı dinamik sorgu oluşturucular bu koşulu içerir, böylece herhangi bir "gerçek" koşul, ANDbir çek yapılmadan eklenebilir if (first condition) 'WHERE' else 'AND'.


Bir sorgu oluşturucunun bir koşulun bir satırda ilk olup olmadığını belirleyememesi garip gelebilir, ancak bence de haklısınız.
ern0

3
genellikle "sorgu oluşturucu" SQL deyimi üzerinde el ile birleştirmek için kod yazma biri olduğu durumdur. bazen daha resmi bir sorgu oluşturma kütüphanesi getirmek onu ortadan kaldırır.
araqnid

1
Bunun gibi "eski" kod ile uğraşmak zorunda kaldım ve bu çok doğru. Tüm SQL ifadesini tek bir dizede birleştirirken, tetikleyebilecek veya tetikleyemeyecek if / then veya case ifadelerinin demetleri olacaktır. Bu kod yollarından herhangi birinin alınıp alınmadığını asla bilemeyeceğiniz için AMA WHERE yan tümcesinize (ve sürekli olarak dizenin bir parçası olan bir yan tümceden dolayı) gömülü bir AND'iniz varsa, (a) rahatsız edici AND veya ( b) basitçe mantıklı bir gerçekçilik geçirin. "1 = 1" eklemek, dizeyi doğru şekilde düzeltmekten daha kolaydır.
Avery Payne

5

Programınızda benzer sorgular üreten birçok SQL deyimi oluşturma noktanız varsa, bu hile ile incelenmiş olanı işaretleyebilirsiniz. Cümle saymakla ilgiliyse 42, bir SQL günlüğünden kaçabilmeniz için aşağıdaki kodu kullanabilirsiniz .

select count(42) from table

4

Her zaman doğru olan bir durum sağlar, bu nedenle sonuçları etkilemez, ancak WHERE yan tümcesinde zaten bir öğe olduğunu biliyorsunuz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.