SQL - Consulta Sql obtener campos distintos

   
Vista:

Consulta Sql obtener campos distintos

Publicado por Victor (5 intervenciones) el 11/03/2015 11:05:49
Buenos días.

Tengo dos tabla que tienen un campo en común y necesito obtener los registros de ese campo común que están en una tabla pero no en la otra.

Ej: tabla usuario:IdUsuario,nombre,apellidos...
tabla datosPersonales: idUsuario,nombre apellidos.

Por tanto,necesito saber los registros del campo nombre(por ejemplo) que no están en la tabla datos personales.
No se si me explico.

Esto pasa cuando se meten datos a mano en la BD(eran mas de 300 ) y no por la aplicación

Quedo a la espera de sus respuestas,saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Consulta Sql obtener campos distintos

Publicado por leonardo_josue (877 intervenciones) el 11/03/2015 18:06:02
Hola Victor:

No nos dices con qué BD's estás trabajando, este dato es muy importante, pues hay diferencias significativas entre todos los DBMS's, sin embargo, lo que pretendes es algo bastante común en SQL... para el ejemplo voy a hacerlo con MySQL, pero en realidad aplica para cualquier otro motor.

Para encontrar registros que se encuentran en una tabla, pero no se encuentran en otra puedes hacerlo de distintas formas: con NOT EXISTS, NOT IN o con LEFT JOIN... veamos un ejemplo. Supongamos que tienes dos tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> SELECT * FROM tabla1;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    3 | tres        |
+------+-------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla2;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    4 | cuatro      |
+------+-------------+
3 rows in set (0.00 sec)

Si quieres saber qué registros (descripciones) hay en tu tabla1 que no aparecen en tu tabla2, podrías hacerlo así:

Con NOT IN:

1
2
3
4
5
6
7
8
mysql> SELECT T1.* FROM tabla1 T1
    -> WHERE T1.id NOT IN (SELECT T2.id FROM tabla2 T2);
+------+-------------+
| id   | descripcion |
+------+-------------+
|    3 | tres        |
+------+-------------+
1 row in set (0.00 sec)

Con NOT EXISTS:

1
2
3
4
5
6
7
8
9
mysql> SELECT T1.* FROM tabla1 T1
    -> WHERE NOT EXISTS ( SELECT T2.id FROM tabla2 T2
    ->                    WHERE T1.id = T2.id);
+------+-------------+
| id   | descripcion |
+------+-------------+
|    3 | tres        |
+------+-------------+
1 row in set (0.00 sec)

o con LEFT JOIN:

1
2
3
4
5
6
7
8
9
mysql> SELECT T1.* FROM tabla1 T1
    -> LEFT JOIN tabla2 T2 ON T1.id = T2.id
    -> WHERE T2.id IS NULL;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    3 | tres        |
+------+-------------+
1 row in set (0.00 sec)

Dale un vistazo también a esta liga:

http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/

Ahí se muestra cuál método es el mejor para este tipo de comparaciones.

Finalmente, te recuerdo que debes tener cuidado con las comparaciones entre cadenas, ya que por ejemplo JOSÉ es distinto a José y distinto a jose... es decir, las comparaciones son sensibles a mayusculas, minúsculas y acentos, si lo que pretendes es hacer una "limpieza" de datos, esta parte es muy importante y no debes perderla de vista. Además, el que tengas dos personas que llamen JUAN PEREZ, NO NECESARIAMENTE SIGNIFICA QUE SE TRATE DE LA MISMA PERSONA... no debes tomar en cuenta sólo el nombre y el apellido para determinar si un registro está duplicado o no.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Sql obtener campos distintos

Publicado por Victor (5 intervenciones) el 12/03/2015 19:30:57
Buenas tardes.

Mañana lo probaré a ver como me va y lo comento por aquí.

Muchísimas gracias por todo, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Sql obtener campos distintos

Publicado por Victor (5 intervenciones) el 20/04/2015 11:47:34
Muchisimas gracias.

Funciona perfectamente.
En momentos así es cuando me doy cuenta que tengo mucho que aprender de SQL.

Alguien conoce algun tuto o libro sobre el tema?

Saludos,y de nuevo gracias Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar