2012-11-20 14 views
24

Ho la seguente domanda: '?'query SQL se il parametro è nullo selezionare tutti

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ?; 

Ora voglio che se è NULL, tutti i record devono essere selezionati. Come posso ottenere questo in SQL? Grazie

+0

Questo mi fa odiare T-SQL ancora più ... –

risposta

20

È inoltre possibile utilizzare le funzioni IFNULL, COALESCE, NVL, ISNULL per controllare valore nullo. Dipende dal tuo RDBMS.

MySQL:

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = IFNULL(?,NAME); 

o

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = COALESCE(?,NAME); 

ORACLE:

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = NVL(?,NAME); 

SQL Server/SYBASE:

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ISNULL(?,NAME); 
+1

Questo non funzionerà se ci sono valori nulli in 'NAME'. Ma per le colonne non annullabili questa è la strada da percorrere =) (MODIFICA: almeno non in SQL Server) –

+0

Attenzione che questo può produrre query più lente del condizionamento dell'SQL per non contenere la clausola where quando il parametro è nullo. – Kram

53

Prova questo:

SELECT * 
FROM MY_TABLE 
WHERE @parameter IS NULL OR NAME = @parameter; 
+0

Come usare questo in PHP? – prograshid

+0

@prograshid - Esegui semplicemente la query in PHP –

+0

Ho provato a esporre la stringa di query ma la sua concessione quando si accede al risultato. Dire una funzione indefinita chiama fetch_assoc – prograshid

Problemi correlati