Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Equivalente de MINUS de Oracle en SQL Server 2000

48 views
Skip to first unread message

ElGabo

unread,
Apr 29, 2002, 10:01:55 AM4/29/02
to
Hola a todos, me gustaría si alguien me puede decir, si existe algún operador equivalente al MINUS de Oracle en SQL Server 2000.
 
Desde ya muchas gracias...

Isaías

unread,
Apr 29, 2002, 11:41:33 AM4/29/02
to
¿Que hace el MINUS de Oracle?

Gracias.
>-----Mensaje original-----

ElGabo

unread,
Apr 29, 2002, 12:21:31 PM4/29/02
to
Eso es lo que yo no sabía con precisión, pero pude ver que lo que hace es:
dado dos querys devuelve los registros del primero que no estén en el
segundo...
algo así cómo:

SELECT distinct emplid
FROM ps_dwsa_st_car_trm
WHERE acad_career = 'GRAD' and institution = 'UMNDL'
AND term = '0999'

MINUS

SELECT distinct emplid
FROM ps_dwsa_stdnt_enrl
WHERE acad_career = 'GRAD' and institution = 'UMNDL'
AND term = '0999'

si el primer select devuelve 10 registro y el segundo 6, el MINUS hace que
la consulta total devuelve 4 registros.


"Isaías" <iis...@hotmail.com> wrote in message
news:7dde01c1ef94$56d34850$b1e62ecf@tkmsftngxa04...

Isaías

unread,
Apr 29, 2002, 2:33:30 PM4/29/02
to
Amigo

Consulte usted OUTER JOINS, eso, es precisamente
el "MINUS" de Oracle.

SELECT employee.job_id, employee.emp_id,
employee.fname, employee.minit, jobs.job_desc
FROM employee LEFT OUTER JOIN jobs ON
employee.job_id = jobs.job_id


Saludos.
>-----Mensaje original-----

>.
>

Miguel Egea

unread,
Apr 29, 2002, 3:44:55 PM4/29/02
to
Isaias no es eso exactamente ya que lo que tu propones no devuelve la
diferencia entre conjuntos que es lo que pide nuestro amigo elGabo

Esta sentencia tengo que hacerla de memoria (espero que funcione)

Select t1.emplid FROM
(SELECT distinct emplid


FROM ps_dwsa_st_car_trm
WHERE acad_career = 'GRAD' and institution = 'UMNDL'

AND term = '0999') T1
left outer join
(SELECT distinct emplid


FROM ps_dwsa_stdnt_enrl
WHERE acad_career = 'GRAD' and institution = 'UMNDL'

AND term = '0999') T2
on t1.emplid=t2.emplid
where t2.empid is null

para probar con algo he preparado este script
use pruebas
go
create table empleados (id int not null)
go
create table empleadosRubios (id int not null)
go
declare @i int
set @i=1
while @i<50
begin
insert into empleados values(@i)
set @i=@i+1
end
go
-- los impares son rubios :-)
declare @i int
set @i=1
while @i<50
begin
insert into empleadosRubios values(@i)
set @i=@i+2
end
go
--debe devolver solo los pares
select e.id
from Empleados E left join EmpleadosRubios Er
on E.id=er.id where er.id is null

y parece funcionar..

La idea se basa en la que propone isaias pero como hay que quedarse con la
diferencia hay que poner la última parte where t2.empid is null para que
solo saque aquellos de T1 que no están en t2, podría hacerse con not in o
not exists, pero así a mi me gusta más :-)


--
Un saludo
Miguel Egea
http://www22.brinkster.com/miguele


Isaías

unread,
Apr 29, 2002, 3:57:12 PM4/29/02
to
Opssss, entonces necesito alguna especie de traducción,
¿como interpretas esto?

"dado dos querys devuelve los registros del primero que no
estén en el segundo"

Gracias.
>-----Mensaje original-----

>.
>

Isaías

unread,
Apr 29, 2002, 4:15:07 PM4/29/02
to
Miguel

Tuve que consultar equivalencias entre Oracle vs SQL
Server y resulta que MINUS de Oracle es SIMILAR a NOT
EXISTS en SQL Server.

¿Tu que opinas?.

Esto es lo que especifica Oracle:

Return difference between two results sets

Oracle = MINUS
SQL = NOT EXISTS

Saludos.
>-----Mensaje original-----

>.
>

Miguel Egea

unread,
Apr 29, 2002, 4:35:19 PM4/29/02
to
Si, de hecho ya lo comentaba en mi mensaje, aunque también decía que me
gusta mas la explicación que daba ;-)
0 new messages