Cita:
Interesante solución. Quisiera saber, en el caso de comparar una tabla maestra que tiene 50,000 registros y una que actualiza que tiene unso 3,000 registros.
Iniciado por leonardo_josue
Hola rhapsodyred:
En realidad tienes muchas formas para obtener lo que necesitas, dependiendo de cómo quieres presentar la información, pero antes que nada algunas consideraciones:
1. Según lo que planteas, los campos OPRID y NAMEUSR no cambian, sólo el ROLENAME.
2. el campo ID es tu campo llave y este tampoco debería considerarse para la consulta.
Partiendo de estos supuestos, te repito, hay muchas formas de hacer lo que pides. Hay un viejo dicho que dice "DIVIDE Y VENCERÁS", la consulta la puedes dividir en tres partes:
- Los registros que no cambiaron.
- Los privilegios originales que se eliminaron.
- Los privilegios nuevos que se agregaron.
De esta manera, puedes hacer tres subconsultas y unirlas con UNION, algo así:
Dale un vistazo para ver si te sirve, trata de ejecutar cada subconsulta por separado para que entiendas su lógica, si continuas con problemas coméntalo en el foro.
Saludos
Leo
En realidad tienes muchas formas para obtener lo que necesitas, dependiendo de cómo quieres presentar la información, pero antes que nada algunas consideraciones:
1. Según lo que planteas, los campos OPRID y NAMEUSR no cambian, sólo el ROLENAME.
2. el campo ID es tu campo llave y este tampoco debería considerarse para la consulta.
Partiendo de estos supuestos, te repito, hay muchas formas de hacer lo que pides. Hay un viejo dicho que dice "DIVIDE Y VENCERÁS", la consulta la puedes dividir en tres partes:
- Los registros que no cambiaron.
- Los privilegios originales que se eliminaron.
- Los privilegios nuevos que se agregaron.
De esta manera, puedes hacer tres subconsultas y unirlas con UNION, algo así:
Código MySQL:
Ver original
+------+--------+--------------+-------------------+ | ID | OPRID | NAMEUSR | ROLENAME | +------+--------+--------------+-------------------+ | 1 | PPEREZ | PEPITO PEREZ | ACCESO PORTAL WEB | | 2 | PPEREZ | PEPITO PEREZ | ADMINISTRADOR | | 3 | PPEREZ | PEPITO PEREZ | CONSULTA CAB | | 4 | PPEREZ | PEPITO PEREZ | REPORTE CAB | +------+--------+--------------+-------------------+ +------+--------+--------------+-------------------+ | ID | OPRID | NAMEUSR | ROLENAME | +------+--------+--------------+-------------------+ | 1 | PPEREZ | PEPITO PEREZ | ACCESO PORTAL WEB | | 2 | PPEREZ | PEPITO PEREZ | ADMINISTRADOR | | 3 | PPEREZ | PEPITO PEREZ | CONSULTA PORTAL | +------+--------+--------------+-------------------+ -> FROM user_old -> user_old.rolename = user_new.rolename -> UNION -> FROM user_old -> WHERE -> user_old.rolename = user_new.rolename) -> UNION -> FROM user_new -> WHERE -> user_old.rolename = user_new.rolename); +------+--------+--------------+-------------------+-------------+ | ID | OPRID | NAMEUSR | ROLENAME | estatus | +------+--------+--------------+-------------------+-------------+ | 3 | PPEREZ | PEPITO PEREZ | CONSULTA CAB | ELIMINADOS | | 4 | PPEREZ | PEPITO PEREZ | REPORTE CAB | ELIMINADOS | | 3 | PPEREZ | PEPITO PEREZ | CONSULTA PORTAL | AGREGADOS | +------+--------+--------------+-------------------+-------------+
Dale un vistazo para ver si te sirve, trata de ejecutar cada subconsulta por separado para que entiendas su lógica, si continuas con problemas coméntalo en el foro.
Saludos
Leo
Eso no hace lento el proceso ? Si es así hay alguna forma de optimizar el mismo?
Gracias.