![]() |
Construcción de SQL dinámica
Vamos a ver, hola ante todo, no se ni como empezar a plantear la cuestión, en fin lo intentaremos:
Tengo por un lado una tabla principal de la que dependen tablas "esclavas": FICHA_PNT MODELOS_PNT FORMATOS_PNT ------------- ------------------- -------------------- ID_PNT ID_PNT ID_PNT TITULO ID_MODELO ID_FORMATO NOTAS ETC... Evidentemente también existen las tablas de Modelos y Formatos donde se guardan el resto de información de las mismas, pero para la consulta no son importantes. Tengo implementada una pantalla de búsqueda, donde tengo dos listas, una para modelos y otra para formatos. A cada una de las listas el usuario va añadiendo "valores" existentes. Así como resultado puedo tener una lista de modelos, por ejemplo, con cincon lineas correspondientes a cinco modelos distintos. Al lado de la lista tengo un RadioGroup con dos items correspondientes a los dos tipos de conectores de la consulta, "OR" y "AND". Cuando el usuario le da al botón buscar de la pantalla, para cada una de las listas se construye la consulta a partir de los datos introducidos por el usuario. Y aquí viene la duda, en el caso del conector "OR", no hay problema pues cuando hago la select e introduzco el inner join, con la tabla de modelos por ejemplo, al considerarse registro a registro puedo poner cosas como: Código:
WHERE ... ID_MODELO='5' OR ID_MODELO='6' OR ETC... Pues la pregunta sería quiero todos los ID_PNT que en su lista de modelos tienen esta lista de modelos suministrados por el usuario. En este caso he hecho esto: Código:
... Mi pregunta es si sabeis de una manera mejor de hacerlo, o si hay alguna clausula del SELECT que haya pasado por alto y facilite la consulta. Gracias por vuestra colaboración y respuestas. Saludos |
Un ejemplo de pregunta puede ser:
Quiero que me enseñes todos los PNT que tengan en su lista de modelos el '1' y el '2'. Saludos |
Hola.
A mi no me parece que se pueda construir una consulta mejor que esa, que haga este calculo. Lo único seria quizá ponerlo en un procedimiento almacenado, para no tener que construir dinamicamente la sentencia SQL. Pero el rendimiento seria similar, ya que tendría que hacerlo igual : para cada registro, mirar si está con el '5', mirar con el '6', etc. ... Un ejplo en Firebird : Código:
for select ID WHERE ... ID_MODELO in ('5', '6', ...) Saludos. |
La franja horaria es GMT +2. Ahora son las 20:42:32. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi