Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-01-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Consulta ¿compleja?

Sé que el título no se ajusta a las normas, pero no encontré uno mas apropiado

Tengo un problema con una consulta para sacar todos los propietarios que tienen inmuebles de un tipo determinado

Código:
Tabla: PROPIETARIO (datos de los propietarios de inmuebles)
============================================================
ID_PROPIETARIO ---> clave del propietario
... -------> otros datos del propietario

Tabla: PROPIEDAD   (datos de los inmuebles)
============================================================
ID_PROPIEDAD -----> clave del inmueble
TIPO_PROPIEDAD ---> puede ser VIVIENDA, GARAJE, OFICINA, etc.
... -------> otros datos del inmueble

Tabla: PERTENECE (correspondencia entre los propetarios y sus inmuebles)
============================================================
ID_PERTENECE -----> identificador del registro
ID_PROPIETARIO ---> clave del propietario
ID_PROPIEDAD -----> clave del inmueble
Con esto saco los datos de TODOS los propietarios
Código SQL [-]
SELECT propietario.ID_PROPIETARIO, propietario.NOMBRE, propietario.APELLIDO_1, propietario.APELLIDO_2
  FROM propietario

Con esto saco los identificadores de los propietarios que tienen propiedades de un tipo determinado
Código Delphi [-]
{ pongo delphi porque no se porque no pilla la etiqueta sql }
SELECT DISTINCT pertenece.ID_PROPIETARIO
  FROM propiedad INNER JOIN pertenece ON propiedad.ID_PROPIEDAD = pertenece.ID_PROPIEDAD
 WHERE propiedad.TIPO="VIVIENDA"

He intentado lo siguiente (aparte de hacer el "canelo")
Código SQL [-]
SELECT propietario.NOMBRE, propietario.APELLIDO_1, propietario.APELLIDO_2,
       propietario.ID_PROPIETARIO IN (
                   SELECT DISTINCT pertenece.ID_PROPIETARIO
                     FROM propiedad INNER JOIN pertenece ON propiedad.ID_PROPIEDAD = pertenece.ID_PROPIEDAD
                    WHERE propiedad.TIPO="VIVIENDA"
       ) AS IDENTIFICADOR
  FROM propietario
pero no me vale, saca TODOS los propietarios y rellena IDENTIFICADOR con cero y menos uno (estos son los que tienen dichas propiedades)

¿como hago para que saque solo éstos últimos?
Agradecido por la ayuda
salvica

edito: ------> uso Zeos como conector y las tablas son .DBF
De nuevo agradecido
salvica

Última edición por salvica fecha: 13-01-2008 a las 18:02:21.
Responder Con Cita
  #2  
Antiguo 13-01-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola salvica,
Creo haber entendido lo que deseas.

No estoy completamente despierto, ando medio dormido... disculpa... Por ahora me falla el cerebro al intentar hacer un SQL con el inner join. La técnica "pobre" es emplear WHERES... Por ahora el SQL que mi cerebro está consiguiendo es este:
Código SQL [-]
select Propietario.ID, Propietario.Nombre, ...
from Propieatio, Propiedad, Pertenece
where (Propietario.ID = Pertenece.ID_propietario) AND (Pertenece.ID_propiedad = Propiedad.ID) AND (Propiedad.Tipo = "VIVIENDA")

Si logro despestarme e inspirarme un poco es posible que logre obtener un SQL con inner joins anidados (que sería la mejor opción).

EDITO:
Creo que el SQL puede ser así:

Código SQL [-]
select ...
from Propietario inner join Pertenece (inner join Propiedad on Pertenece.ID_propiedad = Propiedad.ID) on Propietario.ID = Pertenece.ID_propietario
where Propiedad.Tipo = "VIVIENDA"

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 13-01-2008 a las 18:24:19.
Responder Con Cita
  #3  
Antiguo 13-01-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Hola Delphius, gracias por responder

Depues de muchas vueltas había llegado a esta solución:
Código Delphi [-]
SELECT propietario.ID_CLAVE, 
       propietario.NOMBRE, propietario.APELLIDO_1, propietario.APELLIDO_2, 
       propiedad.TIPO, propiedad.ID_CLAVE
  FROM pertenece, propietario, propiedad
 WHERE (pertenece.ID_PROPIEDAD IN (SELECT propiedad.ID_PROPIEDAD FROM propiedad))
   AND (pertenece.ID_PROPIETARIO=propietario.ID_CLAVE)
   AND (pertenece.ID_PROPIEDAD=propiedad.ID_CLAVE)
   AND (propiedad.TIPO="VIVIENDA")
 ORDER BY propietario.NOMBRE, propietario.APELLIDO_1, propietario.APELLIDO_2
que es bastante parecida a la tuya, la cual probaré ahora mismo

Gracias por todo
salvica
Responder Con Cita
  #4  
Antiguo 13-01-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Tema cerrado

Muchísimas gracias Delphius y quitando un problema de posición de peréntesis se ejecuta muy rápida
Código Delphi [-]
SELECT propietario.ID_PROPIETARIO, 
       propietario.NOMBRE, propietario.APELLIDO_1, propietario.APELLIDO_2, 
       propiedad.TIPO, propiedad.ID_DIRECCION
  FROM propietario INNER JOIN (pertenece INNER JOIN (propiedad) ON pertenece.ID_PROPIEDAD = propiedad.ID_PROPIEDAD) ON propietario.ID_PROPIETARIO = pertenece.ID_PROPIETARIO
 WHERE propiedad.Tipo = "VIVIENDA"
Hasta otra
salvica
Responder Con Cita
  #5  
Antiguo 13-01-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Me alegro de que funcionara.
Como dije... no estoy del todo despierto...

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
La consulta es demasiado compleja mane Conexión con bases de datos 0 26-12-2007 10:00:07
Consulta compleja Jesús Pena SQL 3 19-07-2007 07:54:40
Sentencia SQL super compleja Sr.Scorpion SQL 14 08-03-2007 00:12:49
Consulta SQL algo compleja subzero Firebird e Interbase 2 26-10-2006 18:49:01
consulta SQL que me resulta compleja j2mg SQL 5 29-05-2003 22:50:13


La franja horaria es GMT +2. Ahora son las 12:47:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi