Comparacion entre dos tablas busco los diferentes

05/04/2005 - 08:35 por Roberto | Informe spam
Hola amigos, bueno mi duda es que busco comparar dos tablas en busco de los
campos diferentes. La situacion es la siguiente.
Tengo un tabla donde registro todos los employes que tienen cualificacion
para el trabajo y en otra tabla tengo el registro de empleados que se
registrar para desarrollar ese trabajo. Ahora lo que busco:
1. Busco comparar las dos tablas he incontrar si un empleado que se registro
no tiene las cualificaciones y insertarlo con una marca de que no tiene la
cualificacion.
2. Busco los que son iguales y cambio un marca para decir que estos estan
habilitados para trabajar.

Este este es el select.

select Overtime.* from MES_HRD_OvertimebyEmployee Overtime inner join
MES_HRD_PreIregularSchedule Preirregular on

(convert(char(10),GetDate(),101)=convert(char(10),Datesing,101))and
Preirregular.JobID and Preirregular.JobtypeID=3 and
Preirregular.TypeIrreguarSchedule=1
and Overtime.EmployeeID<>PreIrregular.EmployeeId

Pero cuando hago el select me salen 15 registros repetidos con el diferente
que encontro y no uno, no se si me hace falta realizar algo.
Muchas gracias por la ayuda y el tiempo.

Roberto

Preguntas similare

Leer las respuestas

#1 Maxi
05/04/2005 - 14:18 | Informe spam
Hola, no conozco la estructura de las tablas como para poder darte un query
acertado :( pero si quieres ver cuales entan en un lado y en el otro, solo
deberias hacer un JOIN


Salu2
Maxi


"Roberto" escribió en el mensaje
news:
Hola amigos, bueno mi duda es que busco comparar dos tablas en busco de
los
campos diferentes. La situacion es la siguiente.
Tengo un tabla donde registro todos los employes que tienen cualificacion
para el trabajo y en otra tabla tengo el registro de empleados que se
registrar para desarrollar ese trabajo. Ahora lo que busco:
1. Busco comparar las dos tablas he incontrar si un empleado que se
registro
no tiene las cualificaciones y insertarlo con una marca de que no tiene la
cualificacion.
2. Busco los que son iguales y cambio un marca para decir que estos estan
habilitados para trabajar.

Este este es el select.

select Overtime.* from MES_HRD_OvertimebyEmployee Overtime inner join
MES_HRD_PreIregularSchedule Preirregular on

(convert(char(10),GetDate(),101)=convert(char(10),Datesing,101))and
Preirregular.JobID and Preirregular.JobtypeID=3 and
Preirregular.TypeIrreguarSchedule=1
and Overtime.EmployeeID<>PreIrregular.EmployeeId

Pero cuando hago el select me salen 15 registros repetidos con el
diferente
que encontro y no uno, no se si me hace falta realizar algo.
Muchas gracias por la ayuda y el tiempo.

Roberto


Respuesta Responder a este mensaje
#2 Alejandro Mesa
05/04/2005 - 14:37 | Informe spam
Roberto,

Es muy dificil dar una respuesta si no tenemos conocimiento de la definicion
de las tablas involucradas, incluyendo declaracion de integridad referencial.
Siempre recomiendo que estos casos se posteen la definicion de las tablas,
unos datos de ejemplo asi como la respuesta esperada.

Un comentario, en la sentencia SELECT posteada, haces uso de la expresion:

(convert(char(10),GetDate(),101)=convert(char(10),Datesing,101))



SQL Server no considera esta expresion como un argumento de busqueda, en
otras palabras, no hara un "index seek" (operacion de busqueda mas rapida) en
algun indice que tengas por la columna [Datesing]. Trata de modificar la
expresion a:

(Datesing >= convert(char(8),GetDate(), 112) and Datesign < dateadd(day, 1,
convert(char(8),GetDate(), 112)))

Como ves no se aplica ninguna funcion de la columna en question. Para
corroborar esto, corre el siguiente script:

use northwind
go

exec sp_helpindex orders
go

set statistics profile on
go

dbcc freeproccache
select orderid, customerid, orderdate
from dbo.orders
where convert(char(8), orderdate, 112) = '19970701'

dbcc freeproccache
select orderid, customerid, orderdate
from dbo.orders
where orderdate >= '19970701' and orderdate < '19970702'
go

set statistics profile off
go

Veras que en la primera sentencia select, sql server hace un "index scan" a
diferencia de la segunda done hace un "index seek".


AMB

"Roberto" wrote:

Hola amigos, bueno mi duda es que busco comparar dos tablas en busco de los
campos diferentes. La situacion es la siguiente.
Tengo un tabla donde registro todos los employes que tienen cualificacion
para el trabajo y en otra tabla tengo el registro de empleados que se
registrar para desarrollar ese trabajo. Ahora lo que busco:
1. Busco comparar las dos tablas he incontrar si un empleado que se registro
no tiene las cualificaciones y insertarlo con una marca de que no tiene la
cualificacion.
2. Busco los que son iguales y cambio un marca para decir que estos estan
habilitados para trabajar.

Este este es el select.

select Overtime.* from MES_HRD_OvertimebyEmployee Overtime inner join
MES_HRD_PreIregularSchedule Preirregular on

(convert(char(10),GetDate(),101)=convert(char(10),Datesing,101))and
Preirregular.JobID and Preirregular.JobtypeID=3 and
Preirregular.TypeIrreguarSchedule=1
and Overtime.EmployeeID<>PreIrregular.EmployeeId

Pero cuando hago el select me salen 15 registros repetidos con el diferente
que encontro y no uno, no se si me hace falta realizar algo.
Muchas gracias por la ayuda y el tiempo.

Roberto


Respuesta Responder a este mensaje
#3 Roberto
05/04/2005 - 19:13 | Informe spam
Maxi y Alejandro mucha gracias por la ayuda.

En este momento estoy copidando la estructura de las tablas.

MES_HRD_OvertimebyEmployee

OvertimebyEmployeeID int
EmployeeID int
Datesing datetime
Senority int
Login varchar
Registerdate datetime
IPAddress char
MACAddress varchar


Nombre de la tabla MES_HRD_PreIregularSchedule

PreIregularScheduleId int
DateSystem datetime 8 1
EmployeeId int 4 1
JobID int 4 1
JobTypeId int 4 1
StartTimeProgram datetime 8 1
Senority int 4 1
TypeIrreguarSchedule varchar 20 1
Schedule int 4 0
TotalHours smallint 2 1
Reason varchar 50 1


Estos 3 campos tiene informacion igual en las dos tablas
Datesing StartTimeProgram
Senority Senority
EmployeeID EmployeeId


ID EmployeeId JobID JobTypeId StartTimeProgram Senority
TypeIrreguarSchedule 1 10 3 1 4/5/2005 100
Overtime
2 20 3 1 4/5/2005 90 Overtime
3 21 3 1 4/5/2005 70 Overtime





Datesing es la fecha para cual el empleado se registro para hacer el
trabajo. y StarttimeProgram es la fecha que yo lo estoy programando. La
necesidad es la siguiente: Conocer cuales empleados estan registrados para la
fecha que yo estoy programando el trabajo y cual de ellos tiene la
capacitacion. En la tabla MES_HRD_PreIregularSchedule yo he cargado los que
tiene la capacitacion.

1. Busco comparar las dos tablas he incontrar si un empleado que se registro
no tiene las cualificaciones y insertarlo con una marca de que no tiene la
cualificacion. Para esto estoy realizando el select para poder dectetarlos.

2. Busco los que son iguales y cambio un marca para decir que estos estan
habilitados para trabajar.

Este este es el select.

select Overtime.* from MES_HRD_OvertimebyEmployee Overtime inner join
MES_HRD_PreIregularSchedule Preirregular on

(convert(char(10),GetDate(),101)=convert(char(10),Datesing,101))and
Preirregular.JobID and Preirregular.JobtypeID=3 and
Preirregular.TypeIrreguarSchedule=1
and Overtime.EmployeeID<>PreIrregular.EmployeeId

Pero cuando hago el select me salen 15 registros son los que estan en la
tabla MES_HRD_PreIregularSchedule (qualification del empleado) repetidos con
el diferente que encontro y no uno que en este momento para el ejemplo es el
que busco, no se si me hace falta realizar algo.
Muchas gracias por la ayuda y el tiempo.
Respuesta Responder a este mensaje
#4 Roberto
05/04/2005 - 19:21 | Informe spam
Maxi y Alejandro mucha gracias por la ayuda.

En este momento estoy copidando la estructura de las tablas.

MES_HRD_OvertimebyEmployee

OvertimebyEmployeeID int
EmployeeID int
Datesing datetime
Senority int
Login varchar
Registerdate datetime
IPAddress char
MACAddress varchar


Nombre de la tabla MES_HRD_PreIregularSchedule

PreIregularScheduleId int
DateSystem datetime
EmployeeId int
JobID int
JobTypeId int
StartTimeProgram datetime
Senority int
TypeIrreguarSchedule varchar
Schedule int
TotalHours smallint
Reason varchar

Estos 3 campos tiene informacion igual en las dos tablas
Datesing StartTimeProgram
Senority Senority
EmployeeID EmployeeId






Datesing es la fecha para cual el empleado se registro para hacer el
trabajo. y StarttimeProgram es la fecha que yo lo estoy programando. La
necesidad es la siguiente: Conocer cuales empleados estan registrados para la
fecha que yo estoy programando el trabajo y cual de ellos tiene la
capacitacion. En la tabla MES_HRD_PreIregularSchedule yo he cargado los que
tiene la capacitacion.

ID EmployeeId JobID JobTypeId StartTimeProgram Senority
TypeIrreguarSchedule
1 10 3 1 4/5/2005 100 Overtime
2 20 3 1 4/5/2005 90 Overtime
3 21 3 1 4/5/2005 70 Overtime

OID EmployeeID Datesing Senority
10 20 4/5/2005 70
11 170 4/5/2005 760

1. Busco comparar las dos tablas he incontrar si un empleado que se registro
no tiene las cualificaciones y insertarlo con una marca de que no tiene la
cualificacion. Para esto estoy realizando el select para poder dectetarlos.

OID EmployeeID Datesing Senority
11 170 4/5/2005 760



2. Busco los que son iguales y cambio un marca para decir que estos estan
habilitados para trabajar.

OID EmployeeID Datesing Senority
10 20 4/5/2005 70


Este este es el select.

select Overtime.* from MES_HRD_OvertimebyEmployee Overtime inner join
MES_HRD_PreIregularSchedule Preirregular on

(convert(char(10),GetDate(),101)=convert(char(10),Datesing,101))and
Preirregular.JobID and Preirregular.JobtypeID=3 and
Preirregular.TypeIrreguarSchedule=1
and Overtime.EmployeeID<>PreIrregular.EmployeeId

Pero cuando hago el select me salen 15 registros son los que estan en la
tabla MES_HRD_PreIregularSchedule (qualification del empleado) repetidos con
el diferente que encontro y no uno que en este momento para el ejemplo es el
que busco, no se si me hace falta realizar algo.
Muchas gracias por la ayuda y el tiempo.


"Roberto" wrote:

Hola amigos, bueno mi duda es que busco comparar dos tablas en busco de los
campos diferentes. La situacion es la siguiente.
Tengo un tabla donde registro todos los employes que tienen cualificacion
para el trabajo y en otra tabla tengo el registro de empleados que se
registrar para desarrollar ese trabajo. Ahora lo que busco:
1. Busco comparar las dos tablas he incontrar si un empleado que se registro
no tiene las cualificaciones y insertarlo con una marca de que no tiene la
cualificacion.
2. Busco los que son iguales y cambio un marca para decir que estos estan
habilitados para trabajar.

Este este es el select.

select Overtime.* from MES_HRD_OvertimebyEmployee Overtime inner join
MES_HRD_PreIregularSchedule Preirregular on

(convert(char(10),GetDate(),101)=convert(char(10),Datesing,101))and
Preirregular.JobID and Preirregular.JobtypeID=3 and
Preirregular.TypeIrreguarSchedule=1
and Overtime.EmployeeID<>PreIrregular.EmployeeId

Pero cuando hago el select me salen 15 registros repetidos con el diferente
que encontro y no uno, no se si me hace falta realizar algo.
Muchas gracias por la ayuda y el tiempo.

Roberto


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida