Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2010
juanjo123 juanjo123 is offline
Registrado
 
Registrado: feb 2010
Posts: 8
Poder: 0
juanjo123 Va por buen camino
Consulta con inner join

Hola a Todos,

tengo la siguente consulta
tabla a = 5.200 registros
tabla b = 24.000 registros

Código SQL [-]
SELECT b.codcontrato, a.orden, a.nif, CONCAT(a.apellido1,' ', a.apellido2,', ',a.nombre) as nombrecompleto, b.fechavencont, b.fechabaja 
FROM personal a 
INNER JOIN contratos b on a.orden=b.orden
WHERE a.codempresa='301' 
ORDER BY a.orden asc

y necesito que se muestren los que tengan tambien "a.orden=0", he probada de todas las formas posibles con and,or por todos lados sin exito, porque o me los muestra duplicados ó me muestra 24.000 registro cuando deben de ser 5200

Agradeceria toda ayuda o critica
Gracias

Última edición por delphi.com.ar fecha: 11-02-2010 a las 22:28:40. Razón: Agregué etiquetas
Responder Con Cita
  #2  
Antiguo 11-02-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por juanjo123 Ver Mensaje
...necesito que se muestren los que tengan tambien "a.orden=0"...
¿Quieres los que se cumplan la relación, mas los que estén en cero?
En ese caso se me ocurre que podrías hacer dos consultas con un union

Código SQL [-]
SELECT b.codcontrato, a.orden, a.nif, CONCAT(a.apellido1,' ', a.apellido2,', ',a.nombre) as nombrecompleto, 
     b.fechavencont, b.fechabaja
FROM personal a 
INNER JOIN contratos b on a.orden=b.orden
WHERE a.codempresa='301' 
UNION ALL 
SELECT NULL, orden, nif, CONCAT(apellido1,' ', apellido2,', ',nombre) as nombrecompleto, 
     NULL, NULL 
FROM personal
WHERE a.codempresa='301' 
ORDER BY 2 asc

Ahora si lo que quieres son todos los registros de la tabla "personal" sin importar si estos tienen o no un "contrato", lo que debes hacer es un LEFT JOIN:

Código SQL [-]
SELECT b.codcontrato, a.orden, a.nif, CONCAT(a.apellido1,' ', a.apellido2,', ',a.nombre) as nombrecompleto, 
     b.fechavencont, b.fechabaja 
FROM personal a 
LEFT JOIN contratos b on a.orden=b.orden
WHERE a.codempresa='301' 
ORDER BY a.orden asc


Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 11-02-2010
juanjo123 juanjo123 is offline
Registrado
 
Registrado: feb 2010
Posts: 8
Poder: 0
juanjo123 Va por buen camino
Muchas garcias, delphi.com.ar la segunda me ha ido perfecta.


Perdonar que siga abusando. (las cosas de los novatos)
Algun consejo de como obtimizar esta consulta

Código SQL [-]
SELECT b.codcontrato, a.orden, a.nif, CONCAT(a.apellido1,' ', a.apellido2,', ',a.nombre) as nombrecompleto, b.fechavencont, b.fechabaja 
FROM personal a
LEFT join contratos b on a.orden=b.orden 
where (a.codempresa='901' OR a.codempresa='902' OR a.codempresa='904' OR a.codempresa='905' OR a.codempresa='906' OR a.codempresa='907') 
and (b.fechabaja Is Null or b.fechabaja='0000-00-00') and a.orden<>'0' 
ORDER BY nombrecompleto

Un saludo a todo el foro

Última edición por delphi.com.ar fecha: 11-02-2010 a las 22:29:12. Razón: Agregué Etiquetas
Responder Con Cita
  #4  
Antiguo 11-02-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Si cada tabla tiene sus índices respectivos, la consulta no es imperformante en absoluto. Lo único que resulta algo raro es porque tienes que preguntar empresa por empresa, desconociendo lo que quieres hacer con la consulta... ¿Esas empresas pertenecen a un grupo que puedas normalizar?... .asi preguntas algo como:
Código SQL [-]
and a.campo = valor

Si no puede ser así, porque es algo que elijes desde el front-end, por una cuestión estética, y de mas fácil lectura utilizaría la cláusula IN:
Código SQL [-]
where a.codempresa IN ('901', '902', '904', '905', '906', '907')

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta INNER JOIN NeWsP SQL 3 27-12-2009 14:01:46
Consulta Con INNER JOIN Rockin SQL 2 14-07-2008 08:30:42
Problemas con consulta left outer join hebam SQL 4 06-09-2007 03:43:27
Consulta sobre left / Right outer join ContraVeneno MS SQL Server 2 06-07-2006 15:18:12
EdatabaseError FIELD NOT FOUND en consulta JOIN syntetiko SQL 5 02-10-2004 00:35:31


La franja horaria es GMT +2. Ahora son las 15:42:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi