FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Uso de variables en un query
Hace ya tiempo me explicasteis como definir (RDB$SET_CONTEXT) y usar (RDB$GET_CONTEXT) variables en un query pero me ha llamdo la atención que esas variables definidas no puede usarse en las condiciones del query.
Por ejemplo: tengo definidas en un query estas dos variables. y sin trato de hacer esto en un query: SQL Manager me da este error: Cita:
|
#2
|
||||
|
||||
Prueba hacer un CAST de la variable...
"Strings cannot be multiplied" implica que está tratando de multiplicar un string por un número. Supongo que la variable siempre será de tipo string... No se si se puede dar un tipo a la variable...
|
#3
|
||||
|
||||
Acabe de ver la documentación y dice <value> ::= A value of any type, as long as it's castable to a VARCHAR(255)
Por lo tanto la variable siempre es de tipo VARCHAR(255) y deberás hacer los CAST necesarios. https://firebirdsql.org/refdocs/lang...t-context.html Cita:
|
#4
|
||||
|
||||
Pues tienes razón. Como siempre, me tiro de cabeza a la piscina sin mirar si hay antes agua. Muchas gracias.
|
#5
|
||||
|
||||
Sigo estrellándome una y otra vez. A ver si me ayudáis a ver que está mal porque yo soy incapaz. Tengo este query:
Así, tal cual, da este resultado: Primero que nada que no entiendo por qué aparece tres veces el primer registro si todos los datos son iguales; eso ya me ha dejado perplejo. Además, y de acuerdo con el query, las tres últimas filas están mal ordenadas. Si al query le añado la sintaxis que me sugirió duilioisola, así: Entonces no me devuelve nada y lo que tendría que mostrar son aquellos registros en los que los votos sean iguales o mayores que el 5% del total (796); es decir: las tres últimas filas no deberíanb mostrarse. |
#6
|
||||
|
||||
1ra Pregunta - Por que se triplica el primer registro.
Seguramente porque el JOIN que utilizas lo triplica Por ejemplo si hubiera 1 "Partidos" con 3 "NumElectos" que cumplan la condición del join. También puede ser porque hay 1 "Partidos" con 3 "Resultados" que cumplen la condición B.Partido = C.Partido. Para debugar este problema debes hacer un SELECT * y ver qué columnas son las diferentes. Por ejemplo: Te saldrán todas las columnas de cada tabla. Serán todas iguales excepto las de la tabla que se repite. Solución: deberás corregir... 2da Pregunta: El orden es incorrecto. Veo que hay campos para los que no utilizas ALIAS. Si se repiten en varias tablas puede estar ordenando por el que no quieres. Corrige el ORDER BY Para el campo Electos debes utilizar la función COALESCE porque de lo contrario los nulos estarán al principio (o al final, no recuerod). Entiendo que nombre es de la tabla "Partidos". Puede que haya otro campo Nombre en otra de las tablas. Votos no se decirte, porque es una función. Yo utilizaría la función completa con el CAST a integer para evitar que lo ordene como string ('1', '10', '11', ..., '2', '20', ...)
3ra Pregunta: No sale nada si agregas la condición al WHERE. Lo más sencillo es agregarlo como dato para comprobar que lo que sale es lo que supones que debe salir... podría haber nulos o los CAST están convirtiéndo cosas raras, etc. Veo que se trata de enteros, por lo que quizás el CAST deba ser a INTEGER.
|
#7
|
||||
|
||||
Sugerencia:
No mezcles las formas de unir tablas. Yo utilizaría solo JOINS porque creo que se lee mejor. Cuando mezclas formas no se entiende a la primera la intención de lo que deseas hacer. Normalmente en la parte ON (...) se utilizan los campos de la PK de la tabla "padre", aunque a veces no es lo que se desea. Por otro lado quita del JOIN las partes constantes y muévelas a la parte WHERE. Por ejemplo para el JOIN que haces con NUMELECTOS. La única excepción que haría es si se trata de optimizar y por lo que sea el motor de base de datos entiende mejor una forma que la otra. Ejemplo:
|
#8
|
||||
|
||||
Muchas gracias por tus respuestas. Probaré los cambios que me sugieres.
En este caso no me interesa que se clasifique como "palabra". Última edición por Angel.Matilla fecha: 20-10-2023 a las 10:44:54. |
#9
|
||||
|
||||
Cita:
y eso a pesar de que el Nombre es el último campo de ordenación y el primero es la columna Votos que es un entero. Cada vez lo entiendo menos. |
#10
|
|||
|
|||
Creo recordar que en alguna oportunidad me sucedió algo parecido...Intenta utilizar los indices de las columnas para realizar el ordenamiento...
Saludos cordiales |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Variables en un query | Angel.Matilla | Firebird e Interbase | 3 | 24-06-2022 12:35:05 |
Realizar un Update en delphi con un query concondicion desde otro query!!! | rotsen26 | SQL | 9 | 09-03-2013 23:17:47 |
??enviar variables de consulta de un query a reporte lazreport?? | jasmad | Lazarus, FreePascal, Kylix, etc. | 2 | 27-10-2011 21:22:22 |
Variables por Referencia y Query | Raynel | Tablas planas | 1 | 25-02-2008 11:51:24 |
variables variables (manual php) | salvica | PHP | 0 | 25-09-2005 17:44:52 |
|