Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/07/2010, 15:05
Dantalian
 
Fecha de Ingreso: abril-2010
Mensajes: 49
Antigüedad: 14 años
Puntos: 0
Exclamación Seleccionar 'x' de una tabla cuando 'x' no existe en otra tabla

Buenas tardes señores.
Me he tomado toda la mañana pensando como obtener esta consulta y no he tenido éxito. Yo tengo cuatro tablas tablas:

Tabla alta
+--------------------------------------------------------------------------------+
| idalta | id_responsable | id_ubicacion | fecha_entrega |
+--------------------------------------------------------------------------------+
|--1-------- |--67788-------------|---SAL01----------| 2007-12-26 |
+--------------------------------------------------------------------------------+

Tabla altadetalle

+--------------------------------------------------------+
| iddetalle| idalta | iddactivo | estado |
+--------------------------------------------------------+
|--1----------|--67788--|---1101------|--A----------|
+--------------------------------------------------------+
|-- 2---------|-- 67788--|---1102------|--A---------|
+--------------------------------------------------------+

Tabla activo

+------------------------------------------------------------
| idactivo | descripcion | marca | modelo | ---->
+------------------------------------------------------------+
|---1101---- |---ejemplo1----|---MA1-----|--MOD1---| ---->
+------------------------------------------------------------+
|---1102-----|---ejemplo2----|---MA2-----|--MOD2---| ---->
+------------------------------------------------------------+

Tabla activocomponente

+------------------------------------------------------------------+
| idcomponente | idactivo | serie | nombre | ---->
+------------------------------------------------------------------------+
|--1-------------------|---1102-----|---TYUU---|--COMP1----| ---->
+------------------------------------------------------------------------+
|--2-------------------|---1102-----|---TYUY----|--COMP2----| ---->
+------------------------------------------------------------------+

Tengo que elaborar un select en el cual se listen todos los activos citados en altadetalle teniendo o no componentes. El select que hice es el siguiente:

Código HTML:
select ac.cantidad,ac.descripcion,ad.idactivo,co.nombre as nombre_componente,co.serie
from alta al, activo ac, activocomponente co, altadetalle ad where al.idalta=ad.idalta and ad.idactivo=ac.idactivo and 
(co.idactivo=ad.idactivo or not exists (select co.idactivo from activocomponente co, altadetalle da where co.idactivo=da.idactivo))
Lo cual me genera:

+------------------------------------------------------------------------------------------------+
| cantidad | descripcion | idactivo | nombre_componente | serie |
+------------------------------------------------------------------------------------------------+
|--1------------|---ejemplo2---|---1102---------|--COMP1--------------------|--TYUU---
+------------------------------------------------------------------------------------------------+
|--1------------|---ejemplo2---|---1102---------|--COMP2--------------------|--TYUY---
+------------------------------------------------------------------------------------------------+

Cuando deberia generarme

+------------------------------------------------------------------------------------------------+
| cantidad | descripcion | idactivo | nombre_componente | serie |
+------------------------------------------------------------------------------------------------+
|-- 1----------- |-- ejemplo2---|---1102---------|--COMP1--------------------|--TYUU--|
+------------------------------------------------------------------------------------------------+
|-- 1------------|-- ejemplo2---|---1102---------|--COMP2--------------------|--TYUY--|
+------------------------------------------------------------------------------------------------+
|-- 1------------|-- ejemplo1---|---1101---------|-------------------------------|----------|
+------------------------------------------------------------------------------------------------+

Buscando en internet he intentado establecer que si idactivo de altadetalle es igual a idactivo de componente se impriman sus valores, o que si no existe idactivo de componente pero si en altadetalle se imprima también los valores correspondientes, pero no he podido hacerlo. ¿Que me hace falta? De antemano gracias.

Última edición por Dantalian; 01/07/2010 a las 15:15