2009-02-05 16 views
7

Stavo verificando alcune query che sto mantenendo e un programmatore ha inserito le query "dove 1 = 1" mi sembra sempre valido.Perché una query sql deve avere "dove 1 = 1"

Ci sono vantaggi a questo?

Duplicate:Why would someone use WHERE 1=1 AND in a SQL clause?

Tale questione non è una risposta a questa domanda.

Dove-clausola:

select * from table where 1=1 and sStatus not in ('status1','status2','status3') 

Nessuna programmazione o se le dichiarazioni per spingere una e in là. Una domanda diretta.

Se si potesse chiudere, vorrei sapere se c'è uno scopo in modo che io possa riscrivere e rimuovere 1 = 1 se non è necessario.

+0

Nessuno scopo che io possa vedere, e giudicando dalla risposta accettata nel collegamento sembra che il 1 = 1 sarà ottimizzato. Probabilmente qualcuno ha fatto un po 'di programmazione di pasta e pasta. –

risposta

16

Si tratta di query dinamiche? A volte ciò è utile quando si creano query dinamiche in base a parametri facoltativi.

1

Ho visto due ragioni per questo, quando si vuole sempre un risultato vero, o quando ci sta per essere un numero arbitrario di "e la condizione = valore" aggiunto alla dichiarazione

6

Io lo uso per clausole dove dinamico dinamico quando sto facendo una programmazione pigra e non voglio controllare sempre se la clausola è vuota per determinare se ora ho bisogno di un "AND" tra le mie clausole dinamiche.

4

Questo ha senso solo nelle query dinamiche. Se si aggiungono parametri in un ciclo invece di dover verificare se esiste già un WHERE, è possibile aggiungere AND Column = Value ogni volta.

10

Se si crea dinamicamente una clausola where, si può essere un po 'pigri e assumere che ogni clausola aggiunta possa essere preceduta da "AND", ad es.

$str="select foo from bar where 1=1"; 

if ($filter1) 
{ 
    $str.=" and col1='frobozz'"; 
} 
0

Ciò è molto interessante ... La clausola WHERE contiene nient'altro che 1 = 1? L'ho visto spesso nei tentativi di iniezione SQL in cui la clausola WHERE è impostata su come mezzo per restituire sempre un elenco di risultati.

Puoi dirci di più su cosa sta succedendo con questa query in modo che potremmo essere in grado di rispondere meglio alla domanda?

  • Nicholas
8

Se si desidera automaticamente aggiungere restrizioni per la tua ricerca, rende il vostro vivere più facile:

string sql = "SELECT * FROM table WHERE 1=1"; 

if (someflag) { 
    sql += " AND valid = 1"; 
} 

if (someotherflag) { 
    sql += " AND special = 1"; 
} 

execute(sql); 

Senza WHERE 1 = 1 si sarebbe in ogni caso necessario verificare se è il prima limitazione si aggiunge (e quindi utilizzare WHERE ...) o se è già stato aggiunto qualche altra restrizione prima (e quindi aggiungere AND ...).

Problemi correlati