PDA

Ver la Versión Completa : Resta de Tablas con SQL


agova
24-11-2003, 21:18:49
Hola a todos, quisiera saber como puedo hacer una resta de tablas con SQL.

Hace mucho tiempo lo hice pero ahora no recuerdo como fué y no encuentro la aplicacion en la que lo lleve a cabo.

de antemano gracias a todos.

guillotmarc
24-11-2003, 21:25:42
Hola.

Perdona, pero ¿ que es una resta de tablas ?

Saludos.

agova
24-11-2003, 21:30:41
con resta de tablas me refiero a lo siguiente:

Tengo informacion en dos tablas que llamare T1 y T2 y quiero hacer la operacion de T1-T2, con lo cual quiero decir que me devuelva los registros de T1 sin los registros comunes que se encuentran en T2 (resta)

roman
24-11-2003, 21:36:51
Yo no sé si existe alguna operación SQL estándar para esto pero, suponiendo que las tablas tienen la misma estructura y un campo llave id podrías intentar con


select * from T1
where id not in
(select id from T2)


// Saludos

agova
24-11-2003, 21:56:15
Gracias Roman

Efectivamente es la forma como lo estaba atacando, esta es mi consulta:

SELECT ORDENP,BULTO FROM PRODUCCIONC WHERE ORDENP NOT IN(SELECT ORDENP,BULTO FROM ORDENP)

pero al abrirla me da el siguiente error:

Subselect has too many fields

por eso me decidi a exponerla en este foro.

roman
24-11-2003, 22:01:35
agova comentó:
SELECT ORDENP,BULTO FROM PRODUCCIONC WHERE ORDENP NOT IN(SELECT ORDENP,BULTO FROM ORDENP)

pero al abrirla me da el siguiente error:

Subselect has too many fields


Hasta donde entiendo, las subconsultas no pueden regresar más de una columna de manera que, si ordenp es el campo llave entonces quita bulto de la subconsulta.

Y no sé si es error de "dedo" pero en la subconsulta después de FROM debe ir el nombre de la segunda tabla y no del campo.

// Saludos

agova
24-11-2003, 22:12:23
La tabla OrdenP tiene como super llave los campos OrdenP y Bulto
y la tabla ProduccionC tiene como super llave los Campos OrdenP, Bulto, y Operacion

guillotmarc
24-11-2003, 22:17:06
Hola.

Creo que para estos casos está el operador EXISTS pero nunca lo he utilizado.

Saludos.

agova
24-11-2003, 22:20:25
Algo importante es que necesito verificar que ambos campos de OrdenP sean verifcados a la vez ya que estos forman una super llave.

Por tanto creo que hacer la cosnulta de este modo no es lo correcto:

SELECT ORDENP,BULTO FROM PRODUCCIONC WHERE ORDENP NOT IN(SELECT ORDENP FROM ORDENP WHERE ULTIMA=38) AND BULTO NOT IN(SELECT BULTO FROM ORDENP WHERE ULTIMA=38)

ya que verifica aisladamente primero la OrdenP y despues el Bulto