El día de ayer se nos ha presentado un problema con respecto a una base de datos, teniendo una tabla de documentos ‘docs’, una de usuarios ‘user’, y una que relaciona muchos a muchos, nuestra tabla llamada ‘user_docs’
user
id | user | cedula |
1 | A | 12345678 |
2 | B | 87654321 |
3 | C | 34567867 |
4 | D | 45656768 |
docs
id | Doc |
1 | 12345678_A |
2 | 12345678_B |
3 | 45656768_A |
4 | 45656768_B |
5 | 87654321_A |
6 | 87654321_B |
7 | 87654321_A |
8 | 87654321_A |
user_docs
id | Id_user | Id_doc |
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 7 |
4 | 2 | 8 |
pero relacionar manualmente cada usuario con su respectivo documento, presentaba una tarea muy tediosa (en realidad eran cientos de usuarios), por lo tanto intentamos establecer un código en SQL para que desarrollara dicha tarea, encontrándonos con el primer problema de buscar los usuarios que no tenían asignado ningún documento, pero con la salvedad que dichos usuarios no estarían en la tabla user_docs, por lo tanto se genero el siguiente código:
SELECT user.id FROM user LEFT JOIN user_docs ON user.id=user_docs.user_id WHERE user_docs.user_id is null
Obteniendo como resultado:
id |
3 |
4 |
el cual toma todos los id de la tabla user, y los compara con su respectiva foreign key, presentada en la tabla ‘user_docs’, y en caso dado de que no exista, el valor sera null, y así obtendremos dichos elementos user que no contengan archivos, ya solucionando esto, se implementó un código para relacionar los archivos, que para nuestra facilidad solo era el mismo numero de cédula añadiéndole un argumento, e insertar los datos a la tabla de user_docs, cada id de user, con su respectivo id en el archivo de docs.
Logrando:
user_docs
id | Id_user | Id_doc |
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 7 |
4 | 2 | 8 |
5 | 3 | 5 |
6 | 3 | 6 |
7 | 4 | 3 |
8 | 4 | 4 |
Espero sea de ayuda…
Siguenos en: