Domanda

stavo passando un paio di domande che sto mantenendo, e un programmatore aveva messo nelle query "dove 1 = 1" a me che sembra sempre di valutare a true.

Ci sono vantaggi a questo?

Duplica: Perché usare qualcun dove 1 = 1, in una clausola SQL?

Tale questione non è una risposta a questa domanda.

Dove-clause:

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 query dritto.

Se si potesse non-vicino questo, mi piacerebbe sapere se c'è uno scopo in modo che io possa riscrivere e rimuovere il 1 = 1 se non è necessario.

È stato utile?

Soluzione

È stato query dinamiche? A volte è utile quando si costruisce query dinamiche sulla base di parametri che sono facoltativi.

Altri suggerimenti

Se si sta costruendo in modo dinamico una clausola in cui, si può essere un po 'pigro e assumere che ogni clausola si aggiunge può essere preceduto da "E", per esempio

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

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

Se si desidera aggiungere automaticamente 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 è la prima restrizione si aggiunge (e quindi utilizzare WHERE ...) o se è già stato aggiunto qualche altra restrizione prima (e quindi aggiungere AND ...).

Io lo uso per dinamico in cui le clausole quando sto facendo un po 'di programmazione pigri e non vogliono controllare sempre se la clausola è vuoto per determinare se ora ho bisogno di un "AND" tra le mie clausole dinamici.

Questo fa davvero senso solo in query dinamiche. Se si sta aggiungendo parametri in un ciclo, invece di dover controllare se c'è un DOVE già si può solo aggiungere e colonna = valore ogni volta.

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

Questo è molto interessante ... La clausola WHERE contiene altro che 1 = 1? Ho visto questo spesso nei tentativi di iniezione SQL in cui la clausola WHERE è impostato su xyz="something" OR 1=1; come un mezzo per restituire sempre un elenco di risultati.

Puoi dirci di più su ciò che sta succedendo con questa domanda in modo potremmo essere in grado di rispondere alla domanda migliore?

  • Nicholas
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top