Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Seleccionar 'x' de una tabla cuando 'x' no existe en otra tabla

Estas en el tema de Seleccionar 'x' de una tabla cuando 'x' no existe en otra tabla en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 01/07/2010, 15:05
 
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
  #2 (permalink)  
Antiguo 02/07/2010, 02:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Seleccionar 'x' de una tabla cuando 'x' no existe en otra tabla

Lee sobre el uso de [INNER,LEFT,RIGHT] JOIN ... ON


Tabla1
id1
desc

Tabla2
id2
id1
desc2

SELECT T1.id1,T1.desc,T2.id2,T2.desc2
FROM Tabla1 T1 LEFT JOIN Tabla2 T2
ON T1.id1=T2.id1

Esto te da todos los registros de la Tabla1 dejando como nulos los campos de la Tabla2 cuando no existe registro relacionado.

Quim

Etiquetas: cuando, existe, seleccionar, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:02.