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 27-04-2005
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Ayuda con sentencia SQL

Hola amigos.
Tengo dos tablas PARADOX y no consigo dar con la sentencia SQL adecuada para el resultado que necesito.

Una tabla (A), contiene los campos ID (string, unico) y Datos (blob). Tiene más campos, pero no son problematicos.
La otra tabla (B) contiene los campos ID (string, NO UNICO) y Comentario (string).

Este seria un ejemplo de la tabla A:
Código:
ID           Datos
 1           Hola Mundo
 2           clubdelphi
 3           Internet
 4           Email
Este seria un ejemplo de la tabla B:
Código:
ID           Comentario
 3           Internet es el futuro!!!
 2           Buena Pagina
 3           Hay que actualizar a la version 2.0
 1           Tipico mensaje
 4           No more SPAM !!!
El listado que busco seria:
Todos los campos de la tabla A + el campo COMENTARIO de la tabla B, pero si en la tabla B hay más de un comentario sobre el mismo ID (como pasa con 3 -Internet) solo quiero ver el primero.

Esto es lo que busco:
Código:
ID           Datos               Comentario
 1           Hola Mundo       Tipico mensaje
 2           clubdelphi         Buena Pagina
 3           Internet            Internet es el futuro!!!
 4           Email                No more SPAM !!!
La sentencia que utilizo es:
Código:
SELECT * FROM A INNER JOIN B
  ON (A.id = B.id)
  ORDER BY A.id
Pero esta sentencia me devuelve una fila más de las que necesito:
Código:
ID           Datos               Comentario
 1           Hola Mundo       Tipico mensaje
 2           clubdelphi         Buena Pagina
 3           Internet            Internet es el futuro!!!
 3           Internet            Hay que actualizar a la version 2.0  <<-- Esto NO
 4           Email                No more SPAM !!!
¿Pueden ayudarme ??
Gracias
PD: Editado para ver mejor los ejemplos

Última edición por Sick boy fecha: 27-04-2005 a las 11:01:17.
Responder Con Cita
  #2  
Antiguo 27-04-2005
Avatar de Investment
Investment Investment is offline
Miembro
 
Registrado: may 2003
Posts: 378
Poder: 21
Investment Va por buen camino
Post

Esta sentencia te devolvería lo que quieres, pero...

Código:
SELECT DISTINCT a.id, a.datos, MIN(comentario) as comentario
FROM a , b
where a.id=b.id
group by a.id,a.dato
Código:
ID           Datos            Comentario
 1           Hola Mundo       Tipico mensaje
 2           clubdelphi       Buena Pagina
 3           Internet         Internet es el futuro!!!
 4           Email            No more SPAM !!!
...pero si tuvieses en la tabla b:
Código:
 3           Internet es el futuro!!!
3           Atencion, Hay que actualizar a la version 2.0
te devolveria :

Código:
ID           Datos            Comentario
 1           Hola Mundo       Tipico mensaje
 2           clubdelphi       Buena Pagina
 3           Internet         Atencion, Hay que actualizar a la version 2.0
 4           Email            No more SPAM !!!
__________________
Saludos,
Peter Investment
Responder Con Cita
  #3  
Antiguo 27-04-2005
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Gracias, pero el campo DATOS es BLOB, y no lo puedo cambiar !!!!

Cita:
Esta sentencia te devolvería lo que quieres, pero...
SELECT DISTINCT a.id, a.datos, MIN(comentario) as comentario
FROM a , b
where a.id=b.id
group by a.id,a.dato
Ya habia intentado esta sentencia, deberia haber posteado que no funciona, lo siento.
El BDE no me permite GRUOP BY en los campos BLOB.
Tampoco me permite un CAST(datos as VARCHAR(200)) con el que podría intentar tratar el campo BLOB como alfanumerico

Evidentemente, lo puedo hacer con 2 querys, pero ese no es el objetivo, ya que necesito 1 solo dataset.

Gracias por su ayuda
Responder Con Cita
  #4  
Antiguo 27-04-2005
Avatar de hermes_32
hermes_32 hermes_32 is offline
Miembro
 
Registrado: jul 2003
Posts: 94
Poder: 21
hermes_32 Va por buen camino
Ya que no se puede agrupar por campos Blob, mi recomendación es que uses una tabla auxiliar donde almacenar los campos de la tabla B que te interesen y a partir de esa tabla "filtrada" ya puedes resolver facilmente el caso.

Un saludo.
Responder Con Cita
  #5  
Antiguo 27-04-2005
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Gracias Hermes_32
Cita:
Ya que no se puede agrupar por campos Blob, mi recomendación es que uses una tabla auxiliar donde almacenar los campos de la tabla B que te interesen y a partir de esa tabla "filtrada" ya puedes resolver facilmente el caso.
Pero como digo en el post anterior, 2 tablas o 2 consultas no es una solución, el resultado debe estar en un solo dataset.

Las tablas tienen más campos que los comentados, pero ninguno crea problemas, solo el tipo BLOB.
Si quito el campo BLOB del query todo funciona, pero el caso es que ese campo es importantisimo.

PD: De la tabla B, solo quiero 1 resultado, no me importa despreciar los demas, y no me importa si el COMENTARIO es el primero, el ultimo o el 26º

Gracias
Responder Con Cita
  #6  
Antiguo 27-04-2005
Avatar de hermes_32
hermes_32 hermes_32 is offline
Miembro
 
Registrado: jul 2003
Posts: 94
Poder: 21
hermes_32 Va por buen camino
Buenas de nuevo Sick. He resuelto el problema con un campo calculado. Puedo enviarte el programilla por mail si quieres ya que por aqui darte la solucion es poco estético.

un saludo.
Responder Con Cita
  #7  
Antiguo 28-04-2005
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Gracias Hermes.

Si quieres enviarlo, mi correo es txuko.arroba.retemail.es (sustituir .arroba. por @)

De todas formas, creo que se pueden postear ficheros de texto, y puesto que parece que nadie sabe como resolver esto, seria muy interesante hacerlo publico (si tu quieres, claro).

Gracias de nuevo, y por el momento, la pregunta sigue en el aire......

Saludos
Responder Con Cita
  #8  
Antiguo 28-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
En una sola consulta podria ser:

Código SQL [-]
Select *
  from a
      inner join b on a.ID = b.ID
 where b.comentario = (
      Select min(comentario)
        from b b2
       where b2.ID = a.ID
        )

Claro, b.comentario no puede ser blob.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 29-04-2005
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Gracias jachguate, pero no funcionó.

En Interbase / Firebird se que se pueden hacer subconsultas, pero lo he probado en Paradox y me dice "Capability not supported"

De momento, he puesto un segundo query en el evento OnGetValue del componente al cual tengo que asignar el dataset. Asi consigo rellenar manualmente ese campo. Un poco chapuza, pero de momento funciona !!!

Tengo que dejar PARADOX, no es la primera vez que no consigo que sentencias SQL "normalitas" funcionen.....

Gracias a todos, aun no he perdido la esperanza de encontrar una solución más limpia y/o eficiente.
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


La franja horaria es GMT +2. Ahora son las 08:18:02.


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