![Neurótico](http://static.forosdelweb.com/fdwtheme/images/smilies/scared.png)
Código:
Cuando se asocia una Parte a una Máquina, se inserta un nuevo registro en esta última tabla, pero no hay registros de Partes que no están asociadas a una Máquina.Tabla: Maquinas Id [smallint] Nombre [varchar(30)] Descripcion [varchar(200)] Estado [boolean] Tabla: Partes Id [smallint] Nombre [varchar(30)] Descripcion [varchar(200)] Estado [boolean] Tabla: Maquina_Parte IdMaquina [smallint] IdParte [smallint]
La pregunta sería qué consulta/s debería hacer para guardar en un Store Procedure en el que le envíe IdMáquina y me devuelva todas las Partes existentes que no están asociadas a esa Máquina (no importa si las partes están asociadas a otras Máquinas, si no están asociadas a la elegida, deben figurar como no asociadas tambíen).
Por si no se entendió, un ejemplo:
Código:
Para obtener las Partes asociadas a una Máquina utilizo:Tabla Partes (Id, Nombre, Descripción, Estado): 1, Parte1, Desc1, 1 2, Parte2, Desc2, 1 3, Parte3, Desc3, 1 4, Parte4, Desc4, 0 Tabla Maquinas (Id, Nombre, Descripción, Estado): 1, Maq1, Descr1, 1 2, Maq2, Descr2, 1 3, Maq3, Descr3, 1 Tabla Maquina_Parte (IdMaquina, IdParte): 1,1 1,3 2,2 2,3
Código:
Que da como resultado:Select Id,Nombre,Descripcion,Estado From Partes Inner Join Maquina_Parte On Partes.Id = Maquina_Parte.IdParte Where Maquina_Parte.IdMaquina = 1;
Código:
El problema es cuando quiero obtener todas las Partes que NO están asociadas a esa Máquina. Por ejemplo, si quiero conocer todas las Partes que no están asociadas a la Máquina cuyo Id=1 me debería devolver:Id, Nombre, Descripcion, Estado 1, Parte1, Desc1, 1 3, Parte3, Dessc3, 1
Código:
He probado con lo siguiente sin éxito:Id, Nombre, Descripcion, Estado 2, Parte2, Desc2, 1 4, Parte4, Dessc4, 0
Código:
Devuelve:Select Id,Nombre,Descripcion,Estado From Partes Left Join Maquina_Parte On Partes.Id = Maquina_Parte.IdParte Where Maquina_Parte.IdMaquina is NULL;
Código:
Y no devuelve la Parte con Id=2 debido a que esa Parte está asociada a otra Máquina (como verán una Parte puede estar asociada a varias Máquinas). Por lo tanto probé con esto:Id, Nombre, Descripcion, Estado 4, Parte4, Desc4, 0
Código:
Pero obtengo el siguiente error (funciona bien si el segudo Select devuelve un sólo registro, pero si develve más de un registro da el error):Select Id,Nombre,Descripcion,Estado From Partes Left Join Maquina_Parte On Partes.Id = Maquina_Parte.IdParte Where Maquina_Parte.IdMaquina is NULL Or Maquina_Parte.IdMaquina!=1 And Maquina_Parte.IdParte!=(Select IdParte From Maquina_Parte Where IdMaquina=1);
Código:
Error Code : 1242 Subquery returns more than 1 row (0 ms taken)
Bueno creo que quedó bastante claro el problema, yo pensé que existía una palabra clave que permitía excluir registros del resultado pero buscando en Internet no lo he encontrado, asi que espero que alguien pueda ayudarme a solucionar esto.
Gracias, saludos!
![de acuerdo](http://static.forosdelweb.com/fdwtheme/images/smilies/dedosarriba.png)