Consulta de actualizacion con dos criterios

Dudas sobre Tablas, Consultas, Formularios, Informes...
LukeSky
Nivel 2
Mensajes: 24
Registrado: Dom Nov 25, 2018 9:15 pm

Consulta de actualizacion con dos criterios

Mensajepor LukeSky » Sab Dic 29, 2018 11:40 pm

Buenas, no doy con la consulta para actualizar una tabla según los datos de otra tabla que tiene una relación por un autonumérico.

El planteamiento es una tabla principal de datos que contiene un campo con el nombre de la localidad, y como se conservan históricos, una misma localidad puede aparecer con dos nombres diferentes.

La otra tabla es una relación de localidades, tiene un ID único, y hay dos campos con un nombre de localidad y otro posible nombre de localidad.

El objetivo es actualizar el campo autonumérico que permite identificar la localidad, y para eso tiene que valorar las dos posibilidades de nombres.

Ejemplo: Existe la localidad de: Arcas y Arcas Del Villar. Su código de localidad es el 77 en la tabla de localidades. Y debe actualizarse en la tabla principal de datos, todas las coincidencias, con el número 77.

Evidentemente busco una solución que no comprenda actualizar localidad por localidad con una consulta de la manera: like "arcas*"...

Adjunto un ejemplo de la base. http://www.filebig.net/files/JzufhPqzDV
Última edición por LukeSky el Dom Dic 30, 2018 11:25 am, editado 2 veces en total.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1039
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Consulta de actualizacion con dos criterios

Mensajepor Sveinbjorn » Dom Dic 30, 2018 8:47 am

Como el enlace que has puesto a tu BD es el que se usa para borrarla del file.big, no hay manera de ver tu ejemplo.... :roll:

Por tanto, la única pista que te puedo dar es que uses el operador OR para poner los dos criterios alternativos en tu consulta de actualización, por ejemplo, para la localidad que citas, te quedaría una SQL tal que así:
UPDATE Tabla SET ID=77 WHERE Localidad='Arcas' OR Localidad='Arcas Del Villar'
Sveinbjorn El Rojo

LukeSky
Nivel 2
Mensajes: 24
Registrado: Dom Nov 25, 2018 9:15 pm

Re: Consulta de actualizacion con dos criterios

Mensajepor LukeSky » Dom Dic 30, 2018 11:03 am

Nivel de carajismo máximo :D, ya lo he resubido http://www.filebig.net/files/JzufhPqzDV

Con respecto al ejemplo que has puesto, hice una consulta así pero no entiendo el motivo por el cual no asignaba el 77 a Arcas del Villar. En la base adjunta hay unos intentos fallidos.

Gracias.

EDITO: El resultado requerido lo obtengo si hago dos consultas, pero el caso es hacerla en una. http://www.filebig.net/files/VyytpcC8Kp

pitxiku
VIP
Reto02
Mensajes: 215
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Consulta de actualizacion con dos criterios

Mensajepor pitxiku » Dom Dic 30, 2018 4:12 pm

Si son sólo 2 columnas las que tienes con los nombres de las localidades, puedes reconvertirlas en una sola con una consulta de unión. Y luego usar esa consulta como base en la de actualización. Algo como:

Código: Seleccionar todo

UPDATE tbl_cosas INNER JOIN
(SELECT tbl_municipios.ID_POBLACION, tbl_municipios.LOCALIDAD
FROM tbl_municipios
UNION ALL
SELECT tbl_municipios.ID_POBLACION, tbl_municipios.LOCALIDAD1
FROM tbl_municipios)  AS TM
ON tbl_cosas.Municipio = TM.LOCALIDAD
SET tbl_cosas.ID_MUNICIPIO = TM.ID_POBLACION;

LukeSky
Nivel 2
Mensajes: 24
Registrado: Dom Nov 25, 2018 9:15 pm

Re: Consulta de actualizacion con dos criterios

Mensajepor LukeSky » Dom Dic 30, 2018 7:57 pm

Me da el mismo error que con otra consulta que hice:

Imagen

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1039
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Consulta de actualizacion con dos criterios

Mensajepor Sveinbjorn » Dom Dic 30, 2018 10:27 pm

Ésta funciona:

Código: Seleccionar todo

UPDATE tbl_cosas SET tbl_cosas.ID_MUNICIPIO = DLookUp("ID_POBLACION","tbl_municipios","LOCALIDAD='" & [Municipio] & "' OR LOCALIDAD1='" & [Municipio] & "'");
Sveinbjorn El Rojo

LukeSky
Nivel 2
Mensajes: 24
Registrado: Dom Nov 25, 2018 9:15 pm

Re: Consulta de actualizacion con dos criterios

Mensajepor LukeSky » Lun Dic 31, 2018 12:50 am

Gracias por tu respuesta, y aunque el código es funcional el tiempo de ejecución es "infumable":

Imagen

Aunque también mostro un mensaje de advertencia pero eso imagino que estará relacionado con otro tema distinto a la consulta propuesta.

Imagen

Si la divido en dos consultas, no llega al minuto cuando en este caso esta mas proximo a los cinco.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1039
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Consulta de actualizacion con dos criterios

Mensajepor Sveinbjorn » Lun Dic 31, 2018 9:57 am

Es normal que la consulta tarde, porque para cada registro de los 345000 que tiene la tabla tiene que ejecutar el dbúsq en la otra, y eso consume tiempo... Quizás haya alguna forma más óptima, pero ayer el resto que se me ocurrieron no funcionaron.... :?

Pero la verdad, no sé qué necesidad tienes de hacerlo en una consulta y buscar que sea más rápida: si ya tienes dos, que tardan en conjunto menos, simplemente las ejecutas seguidas desde un botón de un formulario y ni te enteras de si se ejecuta una consulta, dos o cincuenta... (siempre que ocultes los mensajes de confirmación, claro...). Incluso si lo haces todo vía VBA, ni siquiera necesitas tener las dos consultas en tu BD...

PD: mira este post: viewtopic.php?f=2&t=852 ;)
Sveinbjorn El Rojo

LukeSky
Nivel 2
Mensajes: 24
Registrado: Dom Nov 25, 2018 9:15 pm

Re: Consulta de actualizacion con dos criterios

Mensajepor LukeSky » Lun Dic 31, 2018 2:23 pm

Si, tienes toda la razón casi es mejor que lo deje en dos consultas. La necesidad no es mia, me viene impuesta por terceras personas... que quieren la base lo más simple y cuanto menos VBA (para ellos) mejor. Todo va con acciones de macro, yo no me hubiera complicado y hubiera tirado de ADO pero ....

Luego pense que quizas estaba mal estructurada la información, tras la respuesta del colaborador. Seguramente es mas sencillo que todas las posibles localidades esten relacionadas en una única columna y con su Id de población (indexado con duplicados) relacionado. Por eso es una pena que la consulta que aportó pitxiku no funcionase.

Bueno, que decir... muchas felicidades y feliz salida de año. Un placer estar en este foro. 8-)

pitxiku
VIP
Reto02
Mensajes: 215
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Consulta de actualizacion con dos criterios

Mensajepor pitxiku » Lun Dic 31, 2018 6:49 pm

No me había fijado en una cosa: en la tabla tbl_cosas no tienes un índice/clave que identifique unívocamente a cada registro. Por eso, al agregar la tabla de municipios a la consulta de actualización, Access no puede determinar qué registros son los que se deben actualizar, y por eso el mensajito de consulta no actualizable.

Si puedes crear una clave en la tabla, tal vez puedas usar una única consulta. Si no, lo dicho por Sveinbjorn: usa las 2 consultas en una macro, una detrás de otra, y asunto solucionado.

Por otro lado, en la tabla tbl_municipios, Albacete y Cuenca están repetidos en varios registros. ¿Eso está bien? Porque el id es distinto para cada uno de los registros, con lo que puede haber problemas en la actualización.


Volver a “Objetos Access”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados