Dlaczego ktoś miałby wpisać „where 1 = 1” w zapytaniu?

18

W naszej bazie danych natknąłem się dziś na widok pierwszego zdania w klauzuli where where 1 = 1. Czy to nie powinno być prawdą dla każdej płyty? Dlaczego ktoś miałby to pisać, jeśli nie filtruje żadnych rekordów?

goric
źródło
Odpowiedzi tutaj: dba.stackexchange.com/questions/667/…
Gaius
3
Ponieważ chcą zhakować stronę sombodys ;-)
Tim Schmelter

Odpowiedzi:

40

Niektóre konstruktory zapytań dynamicznych uwzględniają ten warunek, dzięki czemu można dodawać dowolne „rzeczywiste” warunki ANDbez sprawdzania if (first condition) 'WHERE' else 'AND'.

BenV
źródło
Brzmi dziwnie, że konstruktor zapytań nie może ustalić, czy warunek jest pierwszy w linii, ale myślę, że masz rację.
ern0
3
często ma to miejsce, gdy „konstruktor zapytań” to ktoś, kto pisze kod w celu ręcznego połączenia w instrukcję SQL. czasem wprowadzenie bardziej formalnej biblioteki budowania zapytań eliminuje ją.
araqnid
1
Musiałem poradzić sobie z takim „starym” kodem i jest to bardzo prawdziwe. Gdy składasz całą instrukcję SQL w pojedynczy ciąg, pojawią się wiązki instrukcji if / then lub case, które mogą, ale nie muszą. Ponieważ nigdy nie wiadomo, czy którakolwiek z tych ścieżek kodu jest zajęta, ALE masz klauzulę AND w klauzuli WHERE (z powodu klauzuli, która jest konsekwentnie częścią ciągu), musisz (a) usunąć niepoprawne AND lub ( b) po prostu przekazać logiczny truizm. Dodanie „1 = 1” jest łatwiejsze niż prawidłowe zredagowanie ciągu.
Avery Payne,
5

Jeśli masz w swoim programie wiele punktów budujących instrukcje SQL, które generują podobne zapytania, możesz oznaczyć badany za pomocą tej sztuczki. Jeśli zdanie dotyczy zliczania, możesz użyć kodu poniżej, aby można było wylogować się 42z dziennika SQL.

select count(42) from table
ern0
źródło
4

Zapewnia sytuację, która jest zawsze prawdziwa, więc nie wpływa na wyniki, ale wiesz, że jest już jeden element w klauzuli WHERE.

SchwartzE
źródło