Perché qualcuno dovrebbe mettere `dove 1 = 1` in una query?


18

Mi sono imbattuto in una visione del nostro database oggi dove era la prima affermazione nella clausola where where 1 = 1. Questo non dovrebbe essere vero per ogni disco? Perché qualcuno dovrebbe scrivere questo se non filtra alcun record?



3
Perché vogliono hackerare il sito Web di Sombodys ;-)
Tim Schmelter il

Risposte:


40

Alcuni compilatori di query dinamiche includono questa condizione in modo che qualsiasi condizione "reale" possa essere aggiunta con una ANDsenza fare un controllo simile if (first condition) 'WHERE' else 'AND'.


Sembra strano che un generatore di query non sia in grado di determinare se una condizione è la prima di una riga, ma penso anche che tu abbia ragione.
ern0

3
è spesso il caso in cui "query builder" è qualcuno che scrive il codice per concatenarsi manualmente sull'istruzione SQL. a volte l'introduzione di una libreria di creazione di query più formale la elimina.
araqnid,

1
Ho avuto a che fare con un codice "vecchio" come questo, ed è molto vero. Quando si assembla l'intera istruzione SQL in una singola stringa, ci saranno gruppi di istruzioni if ​​/ then o case che possono o meno attivarsi. Poiché non si sa mai se uno di questi percorsi di codice viene preso, MA si dispone di un AND incorporato nella clausola WHERE (a causa di una clausola che fa costantemente parte della stringa), è necessario rimuovere (a) rimuovere il AND offensivo o ( b) passare semplicemente un vero truismo. L'aggiunta di "1 = 1" è più semplice rispetto alla redazione corretta della stringa.
Avery Payne,

5

Se hai molti punti di costruzione delle istruzioni SQL nel tuo programma che generano query simili , puoi contrassegnare quello esaminato con questo trucco. Se la frase riguarda il conteggio, è possibile utilizzare il codice riportato di seguito in modo da poter estrarre 42da un registro SQL.

select count(42) from table

4

Fornisce una situazione che è sempre vera, quindi non influisce sui risultati, ma sai che c'è già un elemento nella clausola WHERE.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.