Ir al contenido


Foto

consulta a dos tablas


  • Por favor identifícate para responder
6 respuestas en este tema

#1 marthamelo

marthamelo

    Advanced Member

  • Miembros
  • PipPipPip
  • 106 mensajes
  • LocationA Coruña

Escrito 07 febrero 2012 - 01:41

Hola otra vez, bueno ahora solicito ayuda para crear una consulta en sql 2005 exp
Me explico tengo dos tablas tb1 y tb2, en la primera tabla tengo los datos de los trabajadores como son su nº de trabajador en la empresa, nombre etc… en la segunda, agrego los partes de trabajos  por obras, en esta agrego, nº del trabajador, obra, horas trabajadas, nº del parte, fecha del parte, etc. (en esta segunda no se agrega el nombre del trabajador pues con el nº ya es suficiente).
Ahora, deseo hacer una consulta la cual me devuelva  el número y nombre de los trabajadores que han laborado en una obra en un periodo de tiempo(mes)  seria algo así:

Select  nº_trab from tab2 where obra ='datos' and fecha_parte between ('01/01/2012')and('31/01/2012')


Hasta ahí todo bien, pero necesito los nombres de esos trabajadores que cumplen la condición anterior y me devuelve la consulta  y estos están en la tab1, y no solo eso, en la tab1 el campo del numero del trabajador se denomina ID_trab y no Nº_trab como en la tab2 
muchas gracias

  • 0

#2 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 07 febrero 2012 - 01:50

Lo que necesitas es hacer una consulta tipo join, de esta forma podrás ejecutar la consulta sobre ambas tablas cuando se cumpla la condición.
No tengo claro como sería en MS SQL pero en general son algo así:



sql
  1. SELECT t1.*, t2.* FROM tabla1 t1 INER JOIN tabla2 t2 ON (t1.Id = t2.Id) WHERE t1.Id = "?"



Solo es cosa de acomodar la sentencia teniendo clara la estructura, espero sirva de algo.


Saludos!
  • 0

#3 jdepaz

jdepaz

    Advanced Member

  • Miembros
  • PipPipPip
  • 264 mensajes
  • LocationMedellín Colombia

Escrito 07 febrero 2012 - 01:59

Hola buen día,

Aunque precisamos conocer bien los campos,
pero tu consulta podría quedar así:


SELECT
tab2.noTrab, tab1.nombre
FROM tab2 LEFT JOIN tab1
ON tab1.ID_trab=tab2.noTrab
WHERE
tab2.obra ='datos' AND tab2.fecha_parte BETWEEN ('01/01/2012')AND('31/01/2012')


Espero te pueda servir

Saludos a todos
  • 0

#4 marthamelo

marthamelo

    Advanced Member

  • Miembros
  • PipPipPip
  • 106 mensajes
  • LocationA Coruña

Escrito 07 febrero 2012 - 02:54

Gracias, Jdepaz me ha funcionado a la primera,  pero tengo un problemita nuevo y es que me repite tantas veces como aparecen partes del mismo obrero como podria hacer para que solo aparezca una vez cada obrero independientemente la cantidad de partes en los que aparezca
gracias una vez más
  • 0

#5 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 febrero 2012 - 03:02

Hola
SELECT 

DISTINCT tab2.noTrab, tab1.nombre

FROM tab2 LEFT JOIN tab1

ON tab1.ID_trab=tab2.noTrab

WHERE  tab2.obra ='datos' AND tab2.fecha_parte BETWEEN ('01/01/2012')AND('31/01/2012')

saludos
  • 0

#6 jdepaz

jdepaz

    Advanced Member

  • Miembros
  • PipPipPip
  • 264 mensajes
  • LocationMedellín Colombia

Escrito 07 febrero 2012 - 03:10

Hola,

La respuesta de Caral es correcta,
realiza la prueba, sino, utiliza la cláusula GROUP BY para los campos notrab y nombre.


Saludos
  • 0

#7 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 08 febrero 2012 - 08:27

Y no entiendo

por que un inner y no un left o algo asi ?

Digo para que lo capeee ( capte en chilanguismo )

  • 0




IP.Board spam blocked by CleanTalk.