Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-04-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Realizar Join entre n1 líneas de una tabla y n2 líneas de otra tabla

El caso es que si tengo los registros de una tabla A con valores 1, 2, 3, 4, y una tabla B con valores A y B, quiero que un Select me devuelva un 'join' en el que los valores de la tabla A se unan con los valores de la tabla B en un número igual a la cantidad de registros que tenga la tabla B, y el resto sea null en el valor devuelto por tabla B.

Algo así como obtener

1 A
2 B
3 null
4 null

Si fueran por ejemplo 7 registros en tabla A (del 1 al 7) y 4 registros en tabla B (de A a D), tendría que obtener

1 A
2 B
3 C
4 D
5 null
6 null
7 null

Espero haberme explicado correctamente
__________________
Piensa siempre en positivo !

Última edición por gluglu fecha: 15-04-2011 a las 19:38:01. Razón: Cambiado título
Responder Con Cita
  #2  
Antiguo 15-04-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola gluglu, ¿se relacionan por algún campo tus dos tablas?.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 15-04-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Si ... claro .... se me olvidó ese detalle. Digamos que en el caso del ejemplo los registros de amabas tablas tuvieran una clave común CLAVE1.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 15-04-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por gluglu Ver Mensaje
Si ... claro .... se me olvidó ese detalle. Digamos que en el caso del ejemplo los registros de amabas tablas tuvieran una clave común CLAVE1.
Y yo resolviendo sin una clave en común , debes utilizar left join.

Código SQL [-]
Select a.campo, b.campo
From tablaA a left join tablaB b on (a.clave=b.clave)

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 15-04-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Lo acabo de realizar con un Stored Procedure :

Código SQL [-]
CREATE OR ALTER PROCEDURE PRUEBA (
    in_Clave integer,
    in_count integer)
returns (
    out_B Char(1))
as
declare variable sel_B char(1);
declare variable aux_count integer;
begin
  AUX_COUNT = 1;
  OUT_B = null;
  For Select CAMPO_1
      from TABLA_B
      where CLAVE1 = :IN_CLAVE
      into SEL_B
  do begin
    if (:AUX_COUNT = :IN_COUNT) then begin
      OUT_B = :SEL_B;
      Suspend;
      Leave;
    end
    AUX_COUNT = AUX_COUNT + 1;
  end
end

Y la consulta sería algo como
Código SQL [-]
Select TA.CAMPO_1 TB.OUT_B
from TABLA_A TA
left join PRUEBA(TA.CLAVE1, CAMPO_1) TB
  on TA.CAMPO_1 = TA.CAMPO_1
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 15-04-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
La solución de Caro parece más sencillita
Responder Con Cita
  #7  
Antiguo 15-04-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Que barbaridad !!

Me acabo de dar cuenta de lo tonto que he sido al crear este hilo ....

Mil disculpas Caro ! Está claro que uno se complica la vida y después al ponerlo en un hilo y querer simplificar el hilo al máximo, no se dá uno cuenta de lo que escribe ....

A ver .... la cosa es más complicada que lo explicado, pero entonces ya volvemos a enreversar tanto la explicación que probablemente nadie me entienda

Hago un Select de una tabla con un montón de campos, con una group by de varios campos y una condición posterior en un having by.

Código SQL [-]
Select BO.BOOKINGNO, BO.CATEGORYNO, BO.SUBCATEGORYNO,
  C2.PAXNO, SP_AI.OUT_COUNTER
from BOOKINGS_OBJECTSTYPE BO
left join CATEGORIES C1
  on C1.CATEGORYNO     = BO.CATEGORYNO
  and C1.SUBCATEGORYNO = 0
left join CATEGORIES C2
  on C2.CATEGORYNO     = BO.CATEGORYNO
  and C2.SUBCATEGORYNO = BO.SUBCATEGORYNO
left join SP_PAXDETAIL_AUTOINC(BO.BOOKINGNO, BO.CATEGORYNO, BO.SUBCATEGORYNO) SP_AI
  on BO.BOOKINGNO      = BO.BOOKINGNO
  and BO.CATEGORYNO    = BO.CATEGORYNO
  and BO.SUBCATEGORYNO = BO.SUBCATEGORYNO
where C1.OBJECTRESERVATION = 0
group by BO.BOOKINGNO, BO.CATEGORYNO, BO.SUBCATEGORYNO, C2.PAXNO,
  SP_AI.OUT_COUNTER
having Sum(BO.QUANTITY) - (Select Count(BRL.CATEGORYNO) from BOOKINGS_ROOMINGLIST BRL
                           where BRL.CATEGORYNO  = BO.CATEGORYNO
                           and BRL.SUBCATEGORYNO = BO.SUBCATEGORYNO
                           and BRL.BOOKINGNO     = BO.BOOKINGNO) > 0

Este Select busca en BOOKINGS_OBJECTSTYPE todos los registros y los agrupa por BOOKINGNO, CATEGORYNO y SUBCATEGORYNO.

Cada uno de esos registros tiene una cantidad determinada (QUANTITY) que agrupo a su vez en Sum(QUANTITY), y además obtengo un número de registros en otra tabla adicional relacionada también.

Esta diferencia entre ambos valores, la aplico internamente en un SP denominado SP_PAXDETAIL_AUTOINC para que de cada BOOKINGNO, CATEGORYNO y SUBCATEGORYNO me devuelva N registros dependiendo de esa diferencia anterior.

Y a todo estos resultados, ahora me toca buscar en otra tabla diferente otros registros relacionados por otro campo, y si existen, los devuelvo con sus campos para los N primeros registros que obtuve en la consulta anterior.

Demasiado complicado para entenderlo rápidamente ...

Por eso intenté simplificar al máximo el hilo y no me dí cuenta de la trivialidad que estaba preguntado !!!
__________________
Piensa siempre en positivo !
Responder Con Cita
  #8  
Antiguo 15-04-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Trivial ... de todas maneras !!

La verdad es que a pesar de todo con un simple Left Join funciona, incluido todo el tocho de Select que he puesto antes

Gracias por haberme hecho darme cuenta de lo simple dentro de lo complicado !
__________________
Piensa siempre en positivo !
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
usando LEFT JOIN o RIGHT JOIN alcides SQL 8 03-05-2007 17:35:46
left join e inner join duda Patricio SQL 0 26-04-2007 22:06:43
JOIN un poco raro AzidRain SQL 1 07-02-2006 08:30:13
LEFT OUTER JOIN e INNER JOIN Juntos alcides SQL 3 08-07-2005 18:06:27


La franja horaria es GMT +2. Ahora son las 19:00:24.


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