Ya lo solucioné. Bastaba con sacar una de las condiciones del LEFT JOIN: la de AND A.Junta = B.Junta
|
Gracias por compartir la solución
Un saludo |
Espérate, que no estoy seguro de haber acertado. :(
|
Mejor nos dices qué es lo que quieres conseguir.
Recuerda este mensaje/consejo. |
Lo cierto es que no sé como explicarlo. Si hago la prueba sólo con lo que me da probelmas funciona a la perfección, pero en cuanto lo acoplo en el query completo no hay manera. No me importaría poner a vuestra disposición la BB.DD. completa y enviaros el query que he montado, pero es que me cuesta explicar lo que busco. Seguiré probando a ver si doy con la respuesta y/o como explicar mejor lo que quiero.
|
Aunque nos dieras la BD, si no sabemos qué quieres conseguir, de nada serviría.
|
Tienes razón.
A ver si consigo explicarme: Tengo que montar un query con FB 2.5 para generar un informe y necesito, entre otros datos, la identidad de dos fichas de acuerdo con unas condiciones. Esta parte de la consulta puede devolver ninguna respuesta, una o dos, pero nunca más de dos, y de ahí estar usando un JOIN. El query que estoy probando es este: Código PHP:
Cita:
Si en el query saco de los LEFT JOIN el trozo K.Junta = B.Codigo / M.Junta = B.Codigo y lo pongo en las condiciones del WHERE (AND K.Junta = B.Codigo AND M.Junta = B.Codigo), no me devuelve nada de nada y, de entrada, hay seguro una única ficha que cumple el segundo LEFT JOIN. Si en vez de AND ... AND uso AND ... OR, me devuelve más de 300.000 filas, lo cual es absurdo porque ninguna de las tablas tiene esa cantidad de filas. |
La definición de las tablas, que se me ha olvidado, es esta:
DatLoc CREATE TABLE DatLoc (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL,Junta CREATE TABLE Junta (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL,Zona CREATE TABLE Zona (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL,Partido CREATE TABLE Partido (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL,Poblacion CREATE TABLE Poblacion (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL,HisElec CREATE TABLE HisElec (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL,Elecciones CREATE TABLE Elecciones (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL,Proceso CREATE TABLE Proceso (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL,La cuestión es que en la tabla Electos, para cada valor del campo Junta sólo puede haber como máximo una única fila para esos valores de PRESIDENTE y/o PORTAVOZ. |
Pero sigues sin decir lo único que debes decir: qué quieres conseguir.
|
Cita:
|
Cita:
la identidad de dos fichas... qué fichas. de acuerdo con unas condiciones... qué condiciones. puede devolver ninguna respuesta, una o dos, pero nunca más de dos, y de ahí estar usando un JOIN... absolutamente nada que ver. Ángel, no sabemos qué quieres conseguir exactamente, solamente vemos el select que has hecho y que dices que no sirve. Tienes que decir algo así como "necesito los registros de la tabla zona donde el codigo esté en municipio y que su poblacion sea la del usuario de la tabla partido que tenga fecha entre aaaa y bbbb que esté en la tabla censo y que su fecha de alta sea del año pasado y su nombre sea luis. Por decir algo. |
Tienes razón. ¿Ves como me iba a costar explicarlo? Dejadme pensarlo un poco como lo cuento. :(
|
A ver si ahora soy capaz de hacerme entender. Tengo que meter este query:
Código PHP:
Código PHP:
|
:confused::confused::confused:
|
¿Qué? ¿Cómo lo ves? :rolleyes:
|
Cita:
Código PHP:
|
Ángel, como he comentado antes, y creía que lo habías entendido, todo eso no nos sirve de nada.
Lo único que necesitamos saber es qué datos necesitas, de qué tablas, con qué parámetros, etc. y eso todavía no lo sabemos. ¿Seguro que has leído y has entendido lo que te enlacé antes? |
Cita:
|
Cita:
|
Cita:
|
Cita:
|
A ver, así a ojo, los join (left o inner) son para relacionar tablas mediante un campo, no para pasar parámetros.
Me refiero a esto: LEFT JOIN Electos B ON B.Cargo = 33 Ejemplo, tablas de facturas y sus líneas: tabla tbFacturas id numero importe tabla tbLineas id , idtbFacturas codigoarticulo cantidad Si quieres sacar las líneas de una factura tienes que relacionar ambas tablas: Con el join relacionas ambas tablas, ya que en el campo idtbFacturas de la tabla tbLineas se almacena el id de la tabla tbFacturas (en este ejemplo) |
Como siempre, faltan los datos iniciales...
|
Cita:
|
Cita:
Cita:
Código PHP:
|
Voy más allá, ya hora ya si que me he perdido del todo. He buscado un población en la que sí haya ambos valores (33 y 34) y si ejecuto el query con esos valores tampoco me da ninguna salida.
|
Cita:
Si usas select A.codigo... y C.codigo ... entonces luego debe haber una relación con esas tablas. Sin embargo hace un left jon con efectos B y persona C y efectos D ¿? Volvemos a lo mismo, y es a lo que se refiere mamcx: dinos qué quieres conseguir. los campos de las tablas que necesitas y sus condicionantes. Tabla Persona, campos tal, tal y tal. Tabla Efectos, campos tal, tal y tal. Que muestre los que son de la poblacion tal y con cargo tal. La población está enlazada con el campo tal de la tabla tal con tabla persona, campo cual. etc. etc. |
Cita:
Cita:
Los campos comunes a ambas tablas son Codigo y Junta (Población). Lo de dos LEFT JOIN es precisamente para eso, para que me saque en el primero los datos de la ficha con el cargo 33 y del segundo los del cargo 34, aunque seguro del todo que algo estoy haciendo mal. |
Lo podemos intentar pasito a pasito, así llegaremos lejos :D, veamos:
Personas de la población 1837 Ahora enlazar con Electos ¿qué campos son los relacionados? campo codigo en electos con qué campo de persona |
Cita:
Vale. Así me sacaría todas las fichas de la poblacion 1837 que tuvieran los cargos 33 ó 34 definidos: tantas filas como fichas encuentre con esos parámetros. Pero, y volviendo a mi mensaje anterior, si necesito que ambos resultados estén en la misma fila ¿cómo lo hago? Es aquí donde me estoy volviendo loco, en como conseguir lo que comentaba antes: Cita:
|
¿Eso es correcto: and per.codigo = ele.codigo?
|
Cita:
Código:
CREATE TABLE Electos (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL, |
Cita:
|
Cita:
Cita:
|
Hola a todos
Cita:
prueba la siguiente consulta, en donde para cada poblaciónn obtienes las distintas personas que ocupan un cargo, si guieres añadir mas cargos es cuestion de insertar un LEFT JOIN por cada nuevo cargo:
|
Cita:
Pon un ejemplo en http://www.sqlfiddle.com |
Muchas gracias por la sugerencia. Por ahí van los tiros.
Cita:
Esto es lo que me haría falta: que los dos registros quedaran en la misma fila para poder "rellenar" bien el informe. Pero es un punto de partida al que yo no había logrado llegar. |
Cita:
|
Por cierto: Se me ha olvidado algo fundamental. Daros las gracias a todos los que os habéis molestado por tratar de ayudarme.
#:-)##:-)##:-)##:-)##:-)##:-)# |
La franja horaria es GMT +2. Ahora son las 17:53:34. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi