2012-07-27 20 views
5

tengo una función que toma un argumento que se utiliza en la cláusula whereConseguir todos los resultados usando cláusula where

función (cadena x) -> Ahora bien, esto creará una consulta SQL que da

select colname from tablename where columnname=x; 

Ahora quiero esta función para dar todas las filas es decir consulta equivalente a

select colname from tablename; 

cuando paso x = "todos".

Quiero crear una consulta genérica que cuando paso "Todo", entonces debería ser yo devolver todas las filas demás filtrar el resultado.

Respuesta

4

Simplemente deja la condición de dónde.

Si realmente quieres que tan complicado el uso

where columnname LIKE '%' 

que sólo filtrará nulos.

0

Si usted tiene que permitir 'all' para pasar a través de parámetros como el valor a su función, entonces tendrá que poner un poco de código de manipulación en su función de construir la instrucción SELECT en consecuencia. Es decir. Puede detectar si el parámetro tiene 'ALL' en él y luego omite la cláusula WHERE de su declaración de SQL. Si aparece un valor que no sea 'ALL', puede incluir la cláusula WHERE junto con el valor de filtro relevante del parámetro.

Un ejemplo de un código para hacer esto sería;

IF x = 'ALL' 
THEN 
    SELECT COLNAME FROM TABLENAME; 
ELSE 
    SELECT COLNAME FROM TABLENAME WHERE COLUMNNAME = X; 
END IF; 
0

No está claro qué idioma se está utilizando para su función, pero hay que analizar de alguna manera el 'todos' antes de llegar a SQL:

public void query(String param) { 
    String value = "": 
    switch (param) { 
    case 'All': 
     value = "*"; 
     break; 
    default: 
     value = param; 
    } 
    String sql = "select colname from tablename where colname="+value; 
    //make the query 
} 
+0

No es explícita, pero leyendo entre líneas que parecen ser usando PL/SQL en MySQL. –

6
select colname from tablename 
where columnname=(case when @x ="All" then columnname 
        else @x end) 
0

Dar un cheque condicional en su código (Java asumiendo) para anexar la cláusula WHERE sólo cuando x != 'All'

mySqlQuery = "SELECT colname FROM tablename" + 
       (x.equals("All") ? "" : "WHERE columnname = "+x); 
2

probar este

select colname from tablename where 1=1 

esperan que el anterior funcionará

0

tuve el mismo problema hace algún tiempo y esta solución funcionó para mí

select colname from tablename where columnname=x or x = 'ALL' 
+0

¿Cuidar para elaborar? – RamenChef

+0

El "o" en la cláusula where está haciendo el truco aquí. Si se cumple la condición columnname = x, la cláusula where filtra los resultados. Otherwhise si x = 'ALL', entonces la cláusula where está anulada. Por lo tanto, eliminando el filtro. –