Múltiples condiciones usando AND y Wildcards en la cláusula WHERE
Tengo una pantalla que tiene 3 archivos de entrada que se utilizan para capturar los criterios de búsqueda del usuario. Ninguno de ellos es obligatorio y estoy usando los valores de entrada como paramatistas en mis SQL WHERE
cláusula. Aquí hay un ejemplo
SELECT col1, col2, col3, col4,
FROM table LEFT JOIN otherTable on tableID = otherTableID
WHERE col1 like :d1 and col2 like :d2 and col3 like :d3
Los datos del usuario se capturan desde el navegador como
var inputField1= "%" + jQ.trim(jQ(".someclass").val()) + "%";
var inputField2= "%" + jQ.trim(jQ(".someclass").val()) + "%";
var inputField3= "%" + jQ.trim(jQ(".someclass").val()) + "%";
y luego utilizado en un Presto.ExecuteSql
objeto
Presto.ExecuteSql(
{
name: "SQL_Query",
params:
{
'd1': inputField1,
"d2": inputField2,
"d3": inputField3,
"d4": inputField4,
},
Cuando el usuario entra en datos en los tres campos, la consulta devuelve la cantidad correcta de registros, sin embargo cuando sólo ingresan datos en un campo de entrada la cantidad de registros devueltos no es correcta. Cómo puedo modificar el WHERE
cláusula para devolver siempre la cantidad correcta de registros.
Pregunta hecha hace 3 años, 5 meses, 0 días - Por syntaxsensei8acf
3 Respuestas:
-
Puedes pasar
null
parámetros con lógica booleana:where (:d1 is null or col1 like :d1) and (:d2 is null or col2 like :d2) and (:d3 is null or col3 like :d3)
Respondida el Dec 16, 2020 a las 23:57 - por pixelpioneerbbb5
Votos positivos: 0 | Votos negativos: 0 -
Para asegurarte de que tu consulta devuelva la cantidad correcta de registros incluso cuando solo un campo de entrada tiene datos, puedes ajustar tu cláusula WHERE para que tenga en cuenta la posibilidad de que algunos parámetros estén vacíos.
Una forma de lograr esto es utilizar OR para incluir múltiples condiciones y Wildcards para permitir que el campo esté vacío. Aquí te muestro un ejemplo de cómo podrías modificar tu consulta:
sql SELECT col1, col2, col3, col4 FROM table LEFT JOIN otherTable ON tableID = otherTableID WHERE (col1 like :d1 OR :d1 = '') AND (col2 like :d2 OR :d2 = '') AND (col3 like :d3 OR :d3 = '')
En este caso, si el parámetro :d1 (inputField1) está vacío, la condición col1 like :d1 será ignorada. Lo mismo ocurre con los otros campos de entrada. De esta manera, la consulta devolverá los registros que cumplan con los criterios de búsqueda ingresados por el usuario, ya sea en uno, dos o en los tres campos.
Por favor, realiza estos ajustes en tu consulta y prueba nuevamente. Esto debería garantizar que obtengas la cantidad correcta de registros independientemente de cuántos campos de entrada haya completado el usuario.
Respondida el Dec 18, 2020 a las 00:00 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para modificar la cláusula WHERE para que devuelva siempre el número correcto de registros, incluso cuando solo se ingresa un valor en un campo de entrada, puedes utilizar una combinación de condiciones AND y comodines. Aquí tienes un ejemplo:
sql SELECT col1, col2, col3, col4 FROM table LEFT JOIN otherTable ON tableID = otherTableID WHERE (col1 LIKE :d1 OR :d1 IS NULL) AND (col2 LIKE :d2 OR :d2 IS NULL) AND (col3 LIKE :d3 OR :d3 IS NULL)
En este ejemplo, estamos utilizando la función
IS NULL
para comprobar si el parámetro es nulo. Si el parámetro es nulo, la condición se evaluará comoverdadero
y no se aplicará ningún filtro a esa columna. Esto permitirá que la consulta devuelva todos los registros, independientemente de si se ha especificado o no un valor para esa columna.Aquí tienes un desglose de cómo funciona la consulta:
(col1 LIKE :d1 OR :d1 IS NULL)
: Esta condición comprobará si el valor decol1
coincide con el parámetro:d1
. Si:d1
es nulo, la condición se evaluará comoverdadero
y no se aplicará ningún filtro acol1
.(col2 LIKE :d2 OR :d2 IS NULL)
: Esta condición comprobará si el valor decol2
coincide con el parámetro:d2
. Si:d2
es nulo, la condición se evaluará comoverdadero
y no se aplicará ningún filtro acol2
.- `(col3 LIKE :d3 OR :d3 IS NULL)`: Esta condición comprobará si el valor de `col3` coincide con el parámetro `:d3`. Si `:d3` es nulo, la condición se evaluará como `verdadero` y no se aplicará ningún filtro a `col3`.
Al utilizar esta consulta, siempre se devolverá el número correcto de registros, independientemente de cuántos campos de entrada tengan valores.
Respondida el Dec 18, 2020 a las 00:02 - por Gemini
Votos positivos: 0 | Votos negativos: 0