Ver Mensaje Individual
  #7 (permalink)  
Antiguo 09/08/2011, 01:40
igg
 
Fecha de Ingreso: agosto-2011
Mensajes: 4
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Consulta 1 a m

Creo que no, creo que si no pones la subselect solo te traerías:
  • 1 Nombre1 23 Nombre23
  • 3 Nombre3 23 Nombre23
  • 8 Nombre8 23 Nombre23

Faltarían aquellos de Tb que no cumplen el where pero que estan relacionados con Ta y que con la subselect sí que te saldrían.

Pongo el código de mi ejemplo y las dos selects:

Código:
CREATE TABLE Ta (ID NUMBER(2), NOMBRE VARCHAR2(10));

CREATE TABLE Tb (ID NUMBER(2), NOMBRE VARCHAR2(10));

CREATE TABLE Tr (idTa NUMBER(2), idTb NUMBER(2));

INSERT INTO Ta (ID, NOMBRE) VALUES (1, 'N_1');
INSERT INTO Ta (ID, NOMBRE) VALUES (2, 'N_2');
INSERT INTO Ta (ID, NOMBRE) VALUES (3, 'N_3');
INSERT INTO Ta (ID, NOMBRE) VALUES (8, 'N_8');

INSERT INTO Tb (ID, NOMBRE) VALUES (23, 'N_23');
INSERT INTO Tb (ID, NOMBRE) VALUES (24, 'N_24');
INSERT INTO Tb (ID, NOMBRE) VALUES (25, 'N_25');
INSERT INTO Tb (ID, NOMBRE) VALUES (27, 'N_27');
INSERT INTO Tb (ID, NOMBRE) VALUES (28, 'N_28');

INSERT INTO Tr (idTa, idTb) VALUES (1, 23);
INSERT INTO Tr (idTa, idTb) VALUES (1, 24);
INSERT INTO Tr (idTa, idTb) VALUES (2, 24);
INSERT INTO Tr (idTa, idTb) VALUES (2, 28);
INSERT INTO Tr (idTa, idTb) VALUES (3, 23);
INSERT INTO Tr (idTa, idTb) VALUES (3, 25);
INSERT INTO Tr (idTa, idTb) VALUES (3, 27);
INSERT INTO Tr (idTa, idTb) VALUES (8, 23);

select Ta.id, Ta.nombre, Tb.id, Tb.nombre
from Ta inner join Tr on Ta.id = Tr.idTa inner join Tb on Tr.idTb = Tb.id
where Ta.id in (select Ta.id
    from Ta inner join Tr on Ta.id = Tr.idTa inner join Tb on Tr.idTb = Tb.id
    where Tb.id = 23)
    
select Ta.id, Ta.nombre, Tb.id, Tb.nombre
from Ta inner join Tr on Ta.id = Tr.idTa inner join Tb on Tr.idTb = Tb.id
where Tb.id = 23
En la primera select devuelve 6 filas mientras que la segunda solo 3, lo que necesito es saber si existe una forma de hacer una select que devuelva lo que la primera pero sin usar la subselect ni el in por problemas de rendimiento y evitar errores por sobrecargar el in ya que pueden salir mas de 1000 resultados.

Gracias.