Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-05-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Coordinar dos tablas

Sé que tiene que ser una tontería; estoy completamente convencido, pero no soy capaz de encontrar la solución. A ver si soy capaz de explicarme.

Tengo una unas tablas de una BB.DD. migradas desde otra de Access.Una vez hecha la migración una de las tablas tiene este contenido:

Cita:
Municipio Partido
6 2
6 3
6 4
6 18
La otra tabla que he de coordinar tiene estos valores:

Cita:
Municipio Partido
6 2
6 3
6 4
6 1
Y el problema me viene con este último valor. Cuando tengo que buscar los datos de ambas tablas para hacer un informe este último no soy capaz de encontrarlo. De una cosa sí estoy seguro y es que en esta segunda tabla ese valor 1 tendría que ser 18 como en la primera, pero no se me ocurre como encajar los datos de la primera en la segunda.


Entre las posibles soluciones pensé busco en la segunda tabla aquellos valores de la primera que no estén y reemplazo unos por otros, pero no sé como hacer un query que me saque esas diferencias, por que este que se me ocurrió:
Código:
SELECT DISTINCT A.Municipio, A.Partido, B.Partido
  FROM Tabla1 A, Tabla2 B
 WHERE A.Municipio = B.Municipio
   AND A.Partido <> B.Partido
   AND A.Municipio = 6
Me devuelve cosas como esta:
Cita:
Municipio A.Partido B.Partido
6 2 1
6 2 3
6 2 4
6 3 1
6 3 2
6 3 4 etc.
Llevo dos días tratando de encontrar una solcuión que me dé esos dos valores, y sólo ambos, pero no se me ocurre como.
Responder Con Cita
  #2  
Antiguo 30-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No me ha quedado muy claro de lo que quieres conseguir, ¿todas las diferentes municipio/partido?
Código:
6 ---  2
6 ---  3
6 ---  4
6 --- 18
6 ---  1
Responder Con Cita
  #3  
Antiguo 30-05-2018
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
No me ha quedado muy claro de lo que quieres conseguir, ¿todas las diferentes municipio/partido?
Si es así, en casi cualquier motor de base de datos, sería con algo como:
Código SQL [-]
select Municipio, Partido
from Tabla1
union 
select Municipio, Partido
from Tabla2
Por si acaso, el Sql Fiddle está en ~
http://sqlfiddle.com/#!18/47ecd/2
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #4  
Antiguo 30-05-2018
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
con esta consulta obtienes los registros de la tabla1 que no están o no coinciden con los de la tabla2:
Código SQL [-]
select tabla1.*
from tabla1
left join tabla2 on tabla2.municipio = tabla1.municipio and tabla2.partido = tabla1.partido
where tabla2.partido is null

Y aquí una variante donde hace la unión de las dos tablas y buscas los registros que no están en ambas tablas

Código SQL [-]
select *
from (
 select *
 from tabla1
 union 
 select *
 from tabla2
 group by municipio, partido
) dat 
left join tabla1 on tabla1.municipio = dat.municipio and tabla1.partido = dat.partido
left join tabla2 on tabla2.municipio = dat.municipio and tabla2.partido = dat.partido
where tabla1.partido is null or tabla2.partido is null
Responder Con Cita
  #5  
Antiguo 30-05-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Gracias por vuestras respuestas.
Cita:
Empezado por Casimiro Notevi Ver Mensaje
No me ha quedado muy claro de lo que quieres conseguir, ¿todas las diferentes municipio/partido?
Sabía yo que no iba a ser fácil explicarlo, y es que es enrevesado. No es todas las diferentes municipio/partido de ambas tablas; son aquellas en las que en ambas tablas no coincidan esas parejas. Dicho de otra forma: Para el ejemplo que he puesto tendría que salir una única fila de ambas tablas. De la primera el par 6/18 y de la segunda el par 6/1.

Es una gestión de resultados electorales y el problema viene de la BB.DD. original en Access. Mientras en la definición de partidos políticos participantes en un proceso tiene definidas siete posibles partidos, a la hora de grabar los cargos electos (concejales) hay 15 ó 20 formaciones diferentes y como en la definición original no hay hueco para tantos, en los electos al no poder indicar el partido pone un valor por defecto pero que puede ser diferente en cada caso.

Cita:
Empezado por bucanero Ver Mensaje
con esta consulta obtienes los registros de la tabla1 que no están o no coinciden con los de la tabla2:
Gracias por la idea. No he probado el código (sinceramente no se me había ocurrido), pero me creo que no va a funcionar bien porque en ningún caso el campo partido está vacío; siempre tiene datos, lo que pasa es que el identificador de partido en la tabla2 puede o no estar en la tabla1.

Cita:
Empezado por TOPX Ver Mensaje
Si es así, en casi cualquier motor de base de datos
Menos aun. Y esto sí lo he probado: Así saco todos los que haya en AMBAS tablas. Yo necesito, de forma simultánea, los que estén sólo en una de ellas. Por eso decía al principio de la respuesta que me hacen falta las dos parejas 6/18 y 6/1, porqué sé seguro que en la tabla2 el partido de código 1 para el muncipio 6, corresponde SEGURO en la tabla 1 al pártido de código 18 apra el municipio 6. Esto, claro está, siempre que haya en las dos tablas el mismo número de partidos.
Responder Con Cita
  #6  
Antiguo 30-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ummm... pero entonces, para que lo tengamos claro, ¿qué resultado esperas obtener exactamente con tu ejemplo?
Responder Con Cita
  #7  
Antiguo 30-05-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por bucanero Ver Mensaje
Y aquí una variante donde hace la unión de las dos tablas y buscas los registros que no están en ambas tablas
No sale exactamente lo que busco, pero se empieza a aproximar bastante a lo que me hace falta. Muchísimas gracias.
Responder Con Cita
  #8  
Antiguo 30-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Ummm... pero entonces, para que lo tengamos claro, ¿qué resultado esperas obtener exactamente con tu ejemplo?
Responder Con Cita
  #9  
Antiguo 30-05-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Ummm... pero entonces, para que lo tengamos claro, ¿qué resultado esperas obtener exactamente con tu ejemplo?
Lo que te he comentado: las dos parejas 6/18 (de la tabla1) y 6/1 (de la tabla2). Lo cierto es que la BB.DD. original en Access es un poco rara:
  • En una tabla tiene guardados los procesos electorales: tipo (muncipales, autónomicas, generales...), su fecha y hasta siete formaciones políticas Ele_Part1...Ele_Part7 (en casi todas el último valor es Otros, para los que no están codificados).
  • En una segunda tabla guarda el recuento de votos de una forma similar: localidad y Vot_P1...Vot_P7 para cada uno de los procesis
  • En otra tabla más (y sólo para las últimas elecciones muncipales) están los concejales que saca cada partido en cada municipio (NCo_P1...NCo_P7).
El partido Ele_Part1 se refleja en Vot_P1 y NCo_P1, etc. Con eso si hay un séptimo u octavo valor no codificado en la primera de ellas, en la segunda se va por defecto al valor Otros. De estó me di cuenta después de migrar las tablas en Access (una de estas dos tablas tiene como 50.000 registros), pero me he dado cuenta que en muchos casos si hay en esa primera tabla existe la codificación del partido, pero la captura de datos está mal hecha. Está claro que si en la tabla donde se codifican los partidos tengo cinco entradas y en la de resultados hay cuatro y una de ellas es Otros, no tengo forma de saber a quien corresponde realmente. Pero aunque eso es problema del usuario final, tengo que facilitarles la mayor cantidad de información,

Adaptando el segundo código de bucanero ya encontré una solución que se acerca bastante a lo que me hace falta.
Responder Con Cita
  #10  
Antiguo 31-05-2018
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.731
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
A ver si esto te ayuda:
https://firebird21.files.wordpress.c..._sql_joins.jpg
Responder Con Cita
  #11  
Antiguo 31-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por duilioisola Ver Mensaje
¡Qué bueno!
Responder Con Cita
  #12  
Antiguo 01-06-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Muy bueno. Dos cosas: primero que varias de esas combinaciones no las conocía y segundo que, ¡por fin!, he visto que los famosos diagramas de Ven valen para algo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tablas dbf patorecalde Tablas planas 4 04-12-2008 01:05:58
Coordinar desplazamiento StringGrid. BEPAI Varios 0 10-05-2007 18:12:23
tablas en sql server demasiadas tablas yeison Cristman SQL 8 10-08-2006 17:26:36
Tablas dbf. keys Conexión con bases de datos 2 13-10-2005 18:10:51
Ver tablas Onti Oracle 4 25-09-2003 17:26:24


La franja horaria es GMT +2. Ahora son las 10:17:54.


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
Copyright 1996-2007 Club Delphi