Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-07-2007
juanpe juanpe is offline
Miembro
 
Registrado: oct 2004
Posts: 46
Poder: 0
juanpe Va por buen camino
Interpretar SQL

Muy buenas.
Tengo una duda con la siguiente SQL a ver si conseguimos aclarar.

Esta SQL debería borrar todo de la tabla estudios donde un id_paciente tiene un nº determinado de estudios (esto es el igual del having count(estudio)= 1 )

delete from estudios where id_paciente in (select id_paciente from estudios group by id_paciente having count(estudio) = 1)

Pues bien, para todos aquellos id_paciente que tienen un único estudio lo hace fenomenal, borra todos.

Pero si aumentamos los estudios por id_paciente ya no lo hace bien, por ejemplo 2 estudios por id_paciente.

delete from estudios where id_paciente in (select id_paciente from estudios group by id_paciente having count(estudio) = 2)

Para situaros, si en la bd tengo 4 registros de 2 id_pacientes distitnos

ESTUDIOS ID_PACIENTE
-----1------------1
-----2------------1
-----3------------2
-----4------------2

y hago la SQL anterior
delete from estudios where id_paciente in (select id_paciente from estudios group by id_paciente having count(estudio) = 2)

el resultado es que borra el primer registro de cada id_paciente, pero no lo borra completamente y necesito que así fuera.

ESTUDIOS ID_PACIENTE
-----2------------1
-----4------------2

Uso IB 7.5.
Perdon por el tochazo pero no sabia explicarme mejor y mas corto.
Gracias por la ayuda.

Última edición por juanpe fecha: 10-07-2007 a las 12:30:25.
Responder Con Cita
  #2  
Antiguo 10-07-2007
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 21
PepeLolo Va por buen camino
hola, la SQL se reduce a:
Código SQL [-]
Delete from estudios A where exists (select B.id_paciente from estudios B where b.id_paciente = a.id_paciente)

hasta lugo.
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
Responder Con Cita
  #3  
Antiguo 10-07-2007
juanpe juanpe is offline
Miembro
 
Registrado: oct 2004
Posts: 46
Poder: 0
juanpe Va por buen camino
Muchas gracias por responder PepeLolo, pero me he equivocado al expresarme.
Cuando digo que "no la borra completamente" me refiero a todos los id_paciente que cumplen la subconsulta. No me referia a todos los registros de la tabla .

A ver si ahora me explico mejor:

Quiero borrar todos los registros de una tabla que cumplen que tienen un nº determinado de estudios.

La consulta de borrar todo es la siguiente:
delete from estudios
Ahora necesito referenciar los registros a traves de un campo, en este caso Id_paciente
where id_paciente in
y ahora solo quiero los id_pacientes agrupados que tienen en total 2 estudio
(select id_paciente from estudios group by id_paciente having count(estudio) = 2)

Pues no me funciona del todo correctamente, ya que como explico en el primer mensaje, elimina solo el primer registro de cada id_paciente que cumple la subconsulta, dejando un registro de esos id_paciente que deberian ser borrado tb.

Gracias de nuevo
Responder Con Cita
  #4  
Antiguo 11-07-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 21
TJose Va por buen camino
Hola juanpe

has revisado que valores te devuelve la sentecia
Código SQL [-]
select id_paciente from estudios group by id_paciente having count(estudio) = 2

Saludos
TJose
Responder Con Cita
  #5  
Antiguo 11-07-2007
juanpe juanpe is offline
Miembro
 
Registrado: oct 2004
Posts: 46
Poder: 0
juanpe Va por buen camino
Cita:
Empezado por TJose
Hola juanpe

has revisado que valores te devuelve la sentecia

Código SQL [-]
select id_paciente from estudios group by id_paciente having count(estudio) = 2





Saludos
TJose
Buenas TJose, gracias por responder.
Si, está revisado.

Para dejarlo mas claro aún, esta seria mi tabla:

ESTUDIOS ID_PACIENTE
-----1------------1
-----2------------1
-----3------------2
-----4------------2
-----5------------3
-----6------------4

Esta Sql
select id_paciente from estudios group by id_paciente having count(estudio) = 2
devuelve dos valores id_paciente 1,2, que son exactamente los registros que quiero borrar, todos los registros del id_paciente 1 y 2 quedando la tabla asi:

ESTUDIOS ID_PACIENTE
-----5------------3
-----6------------4

Y la verdad que no comprendo porque lo hace. Porque si tu haces la sql de borrar para todos los id_pacientes que tienen solo un estudio... delete from estudios where id_paciente in (select id_paciente from estudios group by id_paciente having count(estudio) = 1)
e imaginando de nuevo que nuestra tabla es la siguiente:

ESTUDIOS ID_PACIENTE
-----1------------1
-----2------------2
-----3------------3
-----4------------4
-----5------------5
-----6------------6

El resultado es correcto elimina TODOS LOS REGISTROS. OK!!

ESTUDIOS ID_PACIENTE
----- ------------
----- ------------
----- ------------
----- ------------
----- ------------
----- ------------

Un saludo y gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Saber interpretar los sueños Bicho Humor 0 10-02-2006 11:11:30
Interpretar ficheros XSD kes Conexión con bases de datos 0 20-01-2005 13:16:37
Interpretar codigo Html miguel_fr Internet 2 13-04-2004 16:17:21
Interpretar mensajes de MS-Dos verm83 Varios 3 07-04-2004 16:41:53


La franja horaria es GMT +2. Ahora son las 18:23:33.


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