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))
+------------------------------------------------------------------------------------------------+
| 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.