SQL - Mostrar valores que no esten en una talba

   
Vista:

Mostrar valores que no esten en una talba

Publicado por jonathan (5 intervenciones) el 27/07/2011 10:12:30
HOla buen dio estaba buscando informaicon de como hacer lo siguiente

Tabla 1
Col1 Col 2 Col3
a b x
m n y
h j q

Tabla 2
Col1 Col 2
j k
a b
m n

Resultado
Tabla
Col 1 Col2
j k

Busque en google y me sale para realizar con righ outer inner, pero la verdad es que no me funciona.

Gracias por su ayuda
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

Mostrar valores que no esten en una talba

Publicado por leonardo_josue (880 intervenciones) el 27/07/2011 16:18:10
Buenos días Jonathan:

En tu post no explicas cuál es el criterio que estás utilizando para excluir el los registros, pero creo que sería encontrar aquellos registros de la Tabla2 que no existan en la Tabla1 (considerando sólo las columnas 1 y 2) correcto???

Hay varias formas en las que podrías resolver este problema, pero creo que la mejor sería utilizar NOT EXISTS, más o menos así:

1
2
3
4
select T2.* from Tabla2 T2
where not exists
(select * from Tabla1 T1
where T1.Col1 = T2.Col1 and T1.Col2 = T2.Col2)


No mencionas con qué manejador de BD estés utilizando, pero espero que tenga soportada esta instrucción. Dale un vistazo para ver si te sirve y utiliza la documentación de tu DBMS para entender mejor cómo funciona esta instrucción.

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

Mostrar valores que no esten en una talba

Publicado por jonathan (5 intervenciones) el 27/07/2011 21:48:42
Gracias por responder la base de datos es SQL, aunque ahora lo estoy probando en MYSQL en casa y no me va.

select T2.* FROM red T2

where not exit

(select * from celdas T1

where T1.Celda=T2.Celda and T1.Vecina=T2.Vecina)
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

Mostrar valores que no esten en una talba

Publicado por leonardo_josue (880 intervenciones) el 28/07/2011 18:12:27
Hola de nuevo jonathan:

SQL no es una BD, supongo que te refieres a SQL Server que es muy diferente. Dices que la consulta no te funciona, pero no nos dices si es porque te marca algún error o no te está regresando los resultados esperados. Si fuera el caso de que la consulta te esté arrojando un error deberías comenzar por comentarnos cuál es el mensaje de error que te está devolviendo el DBMS para poder ayudarte a corregirlo,

Si fuera error lógico (no regresa los resultados esperados) entonces tendrías que explicarnos mejor cuál es la lógica que estás siguiendo, pues con los datos que pones de prueba y la salida que esperas la consulta funciona tanto para MySQL como para SQL Server 2005 o posterior (aunque debería funcionar también para la 2000), te dejo los scripts que utilicé para las pruebas:

Con SQL Server 2005 y 2008:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
declare @Tabla1 table (Col1 varchar, Col2 varchar, Col3 varchar)
insert into @Tabla1 values ('a', 'b', 'x')
insert into @Tabla1 values ('m', 'n', 'y')
insert into @Tabla1 values ('h', 'j', 'q')
 
declare @Tabla2 table (Col1 varchar, Col2 varchar)
insert into @Tabla2 values ('j', 'k')
insert into @Tabla2 values ('a', 'b')
insert into @Tabla2 values ('m', 'n')
 
select * from @Tabla1
 
Col1 Col2 Col3
---- ---- ----
a    b    x
m    n    y
h    j    q
 
select * from @Tabla2
 
Col1 Col2
---- ----
j    k
a    b
m    n
 
select T2.* from @Tabla2 T2
where not exists
(select * from @Tabla1 T1
where T1.Col1 = T2.Col1 and T1.Col2 = T2.Col2)
 
Col1 Col2
---- ----
j    k


Para MySQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
mysql> create Table tabla1 (Col1 varchar(1), Col2 varchar(1), Col3 varchar(1));
Query OK, 0 rows affected (0.13 sec)
 
mysql> insert into Tabla1 values ('a', 'b', 'x'), ('m', 'n', 'y'),
    -> ('h', 'j', 'q');
Query OK, 3 rows affected (0.06 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> select * from Tabla1;
+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
| a    | b    | x    |
| m    | n    | y    |
| h    | j    | q    |
+------+------+------+
3 rows in set (0.00 sec)
 
mysql> create table Tabla2 (Col1 varchar(1), Col2 varchar(1));
Query OK, 0 rows affected (0.13 sec)
 
mysql> insert into Tabla2 values ('j', 'k'), ('a', 'b'), ('m', 'n');
Query OK, 3 rows affected (0.11 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> select * from Tabla2;
+------+------+
| Col1 | Col2 |
+------+------+
| j    | k    |
| a    | b    |
| m    | n    |
+------+------+
3 rows in set (0.00 sec)
 
mysql> SELECT T2.* FROM Tabla2 T2
    -> WHERE NOT EXISTS
    -> (SELECT * FROM Tabla1 T1
    -> WHERE T1.Col1 = T2.Col1 AND T1.Col2 = T2.Col2);
+------+------+
| Col1 | Col2 |
+------+------+
| j    | k    |
+------+------+
1 row in set (0.00 sec)


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

Mostrar valores que no esten en una talba

Publicado por jonathan (5 intervenciones) el 05/08/2011 12:37:43
Tio muchas gracias, me funciona pero ahora tengo un problema necesito cruzar el where not exist con dos tablas

es decir

SELECT T2.* FROM Tabla2 T2
WHERE NOT EXISTS
(SELECT * FROM Tabla1 T1
WHERE T1.Col1 = T2.Col1 AND T1.Col2 = T2.Col2
UNION
SELECT * FROM Tabla3 T3
WHERE T3.Col1 = T2.Col1 AND T3.Col2 = T2.Col2
);

pero no me funciona es posbile hacerlo con dos tablas?

Gracias

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