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 26-10-2006
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 193
Poder: 21
muli Va por buen camino
Consulta Dificil

Bueno consulta dificil para mi, facil para muchos, uso Firebird y tengo lo siguiente:
Una tabla maestra:
DNI,Nombre
Una Tabla Detalle: Enlace,modalidad

Las Tablas están unidas por los Campos(DNi-Enlace) existe Referencia de Integridad.

Lo que necesito es lo siguiente:
Necesito una Consulta SQL que me de todos aquellos registros de la tabla maestra que cumplan unas condiciones en la tabla detalle. Es decir, imaginense el siguiente cuadro:
uno pepe
uno Hogar
uno Auto
Dos Juan
Dos Hogar
Dos Accidente
Dos Auto
Tres OtroPepe
Tres Auto
Pues necesito aquella consulta por ejemplo que me quite todos aquellos clientes que tengan Hogar y Auto y no tenga Accidente.

Gracias.
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita
  #2  
Antiguo 27-10-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
En realidad es una consulta facil, te recomendaria aprender un poco mas sobre SQL xq te va a tocar hacer consultas mas complicadas.

Un libro recomendable y gratuito es la La Cara oculta de Delphi 4 que se puede conseguir por internet desde la pagina del autor Ian marteens

Tu consulta seria:
Código SQL [-]
Select * form MAESTRA, DETALLE
where DNI = ENLACE
and MODALIDAD = ...
__________________
[Crandel]
Responder Con Cita
  #3  
Antiguo 27-10-2006
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 193
Poder: 21
muli Va por buen camino
Pues yo te digo que no es tan facil, por que si hago esto:
Código SQL [-]
SELECT * From Maestra Inner Join Detalle On Maestra.Indice=Detalle.Enlace 
Where (Detalle.Producto=Modalidad And Detalle.Producto=OtraModalidad)
No Salen los registros clientes que tienen esas dos modalidades

P.D.: No hace falta que me recomiendes un libro antiguo, ya me he desembolsado la pasta en La Cara Oculta De Delphi 6 que está bastante mejor que el 4. Y un Delphi Original cosa que no pueden decir muchos, y si pido ayuda en el foro, es por que antes estuve revisando todos los mensajes del foro, ya que no pregunto por preguntar.
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita
  #4  
Antiguo 27-10-2006
richi richi is offline
Miembro
 
Registrado: jun 2006
Ubicación: Portosin - A Coruña
Posts: 51
Poder: 18
richi Va por buen camino
Prueba de la siguiente forma.
Código SQL [-]
Select * form MAESTRA M JOIN DETALLE D ON (M.DNI=D.ENLACE)
where MODALIDAD='Hogar' OR MODALIDAD='Auto'

Tanto hogar como auto mira en la base de datos si estas en mayusculas o minusculas en este caso buscaria los que tienen la primera letra en mayuscula y el resto en minusculas.
Responder Con Cita
  #5  
Antiguo 27-10-2006
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 193
Poder: 21
muli Va por buen camino
De esas forma me salen todos aquellos registros que tengan Auto o Hogar no los que tengan auto y Hogar, pues si hay un cliente que tiene solamente Auto ya saldría, cuando no debería de salir.

Saludos
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita
  #6  
Antiguo 27-10-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
De esta forma no lo veo muy complicado:
Código SQL [-]
select * from maestra 
where dni in (
                select dni from detalle 
                where modalidad in (:incluir) and 
                modalidad not in (:noincluir)
                )

He buscado la mejor forma para programarlo (no de ejecución). Yo suelo crear un StringList que tenga "Hogar" y "Auto" y con una simple rutina QuotedList, ya tengo lo que va entre paréntesis armado como si fuera un parámetro.

Código Delphi [-]
function QuotedList( Items: TStrings):string;
var i:integer;
begin
    result := '';
    for i:= 0 to Items.Count-2 do
      Result := Result +QuotedStr(Items[i])+',';
    if Items.count > 0 then
      Result := Result + quotedstr(Items[Items.count-1]);
end;
Para armar la consulta:
Código Delphi [-]
var st:StringList;
begin
st := stringlist.Create;
st.add('Hogar');
st.Add('Auto');

query1.parambyname('incluir').AsString := QuotedList(st);
query1.parambyname('noincluir').AsString := QuotedList(st); // obviamente cambiando los datos.
query1.Open;

Como la rutina QuotedList recibe un TStrings, incluso puedes usar un memo, o combobox, o Listbox para que el usuario añada las modalidades.

Vuelvo a Editar el mensaje

Esto quizás sea más cómodo:
Código Delphi [-]
function QuotedListchklb( ctrl:TCheckListBox;const SoloChecked:Boolean = True):string;
var i:integer;
begin
    result := '';
    with ctrl do
    
    for i:= 0 to Items.Count-1 do
      if SoloChecked then
      begin
        if Checked[i] then
          Result := Result +QuotedStr(Items[i])+',';
      end
      else
        Result := Result +QuotedStr(Items[i])+',';

  if Length(Result)>0 then
    Delete(Result,Length(Result),1); //quito la ultima coma

end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 27-10-2006 a las 14:29:41.
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
Consulta dificil mysql taru MySQL 6 03-09-2006 03:29:55
Una consulta dificil noshy SQL 3 31-05-2006 20:50:58
Una consulta dificil noshy SQL 3 22-05-2006 18:22:06
Consulta Dificil Abel Garcia Firebird e Interbase 5 18-11-2005 19:40:50
Una consulta un poco dificil? danytorres SQL 1 24-10-2003 22:42:03


La franja horaria es GMT +2. Ahora son las 17:18:31.


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