¿Puede la condición de la cláusula where estar representada por otra columna?

Tengo usuarios que ingresan las condiciones para la cláusula where de una tabla. Ahora quiero usar esa cláusula para seleccionar. ¿Cómo puedo hacer eso? Ejemplo,

Condition table ( ckey, condition)

1   fn like 'G%' and ln like 'B%'

Name table (nkey, fn, ln)

Se busca consulta

select * from Name where ... use condition in row 1 of Condition table .....

preguntado el 05 de febrero de 12 a las 01:02

¿¿Que lenguaje de programación estas usando?? Java, PHP, etc. -

No quiero hacer un viaje de ida y vuelta por otras razones. así que estoy buscando una solución dentro de SQL. -

El resultado final debería ser equivalente a: seleccione * de Nombre donde fn como 'G%' y ln como 'B%' pero la condición no es una constante de antemano. -

mira mi respuesta ... te ayudará ... -

3 Respuestas

La mayoría de los DBMS admiten una subconsulta dentro de WHERE, que incluye subconsulta correlacionada.

Es difícil decirlo sin más información, pero probablemente necesitará una subconsulta (¿correlacionada?) En la tabla de condiciones.

Respondido 05 Feb 12, 06:02

Se necesita una subconsulta, pero todavía no puedo traer la columna de condición como condición de la cláusula where. esencialmente, quiero seleccionar * de Nombre donde "usando el resultado de la condición de selección de Condición donde ckey = 1" - user1045358

@ user1045358 No tengo claro cuál es el problema. ¿Por qué no puede "usar el resultado de la condición seleccionada de la condición donde ckey = 1"? - branco dimitrijevic

el resultado es un resultado en tiempo de ejecución y no puedo escribirlo de antemano como condición para seleccionar * de Nombre. Parece tener que usar sp como sugiere Brandon. - user1045358

@ user1045358 Ahhh ... entonces quieres cambiar el texto de la sentencia SQL basada en el resultado de otra sentencia SQL? Si es así, necesitará construir el texto SQL usted mismo y luego ejecutarlo con cualquier facilidad que proporcione su DBMS / API. Esto se denomina "SQL dinámico" y se puede realizar en el procedimiento almacenado o en el nivel del cliente. - branco dimitrijevic

Una posible opción sería configurar su tabla de condiciones para imitar la tabla en la que está buscando. Entonces podría simplemente unir las tablas en todos los campos. Para que esto funcione, tendría que establecer por defecto todas las columnas en la tabla de condiciones en '%' en caso de que no se especifique esa condición.

Si sus requisitos son demasiado complejos para que eso funcione, otra solución sería utilizar un procedimiento almacenado que genere sql dinámico en función de lo que está en la tabla de condiciones.

Respondido 05 Feb 12, 06:02

Sin embargo, asegúrese de que si prueba la primera solución, sus combinaciones se vean así: "en Table1.field1 como Table2.field1 y Table1.field2 como Table2.field2". Use 'me gusta', no use '='. - Brandon Moore

sí, la condición puede ser muy compleja ya que es ingresada por el usuario. ¿Podría explicarnos la disolución de usar sp? - user1045358

Si es posible, usaría código (C #, VB, Java, PHP o lo que sea que esté usando) para traducir sus condiciones a SQL y simplemente enviarlo. Incluso si desea almacenar sus condiciones en una tabla, aún puede recuperar esa información en el idioma que elija y formular la consulta que desea enviar. Pero si es absolutamente necesario tener una solución sql pura, pase a un procedimiento almacenado la consulta sql que desea ejecutar junto con un ID de registro para el registro en la tabla Condiciones que debe usar para formular la cláusula where. Luego use el comando EXECUTE para ejecutar la cadena de consulta que formuló. - Brandon Moore

Véase más adelante

accept myID prompt "Enter ID : "
SELECT * FROM myTable WHERE id='&myID'

OR

SELECT * FROM myTable WHERE id= @Enter_ID)

mira cuál está trabajando contigo ...

Respondido 05 Feb 12, 06:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.