Actualizar si condición

10/01/2008 - 17:04 por Martin | Informe spam
Buenas a todos.

Ante todo quisiera agradecerles por el tiempo que inviertan en leer este post.

Tengo una estructura de tres tablas:

T1:
idT1
estado (cuyo valor inicial es "L")

T2:
idT1
idT2

T3:
idT1
idT2
idT3

Utilizaré el término "padre" para referirme a T1, "hijo" a T2 y "nieto" a T3
(a lo mejor, no es lo correcto, pero creo que me ayudará a explicarme mejor).

Como pueden ver, un "padre" puede tener varios hijos y nietos. El problema
está en que debo cambiar el atributo "estado" a "padre" sí y sólo sí tiene
POR LO MENOS UN nieto por cada hijo y que el estado sea diferente de "F".

Quiero evitar el uso de cursores para recorrer cada hijo y hacer un "select
count(*)" por cada hijo en la tabla "nieto".

A lo mejor es un problema sencillo. Sólo puedo decir en mi defensa que soy
nuevo en esto, aunque quizás eso no sea excusa.

Repito, agradezco a quienes se hayan tomado la molestia de leer este post.

Buen día a todos.
 

Leer las respuestas

#1 Jesús López
10/01/2008 - 17:52 | Informe spam
Entiendo que quieres cambiarle el estado a todos los padres que cumplan esa
condición

En este caso parece que plantear el enunciando del problema de forma
negativa nos lleva directamente a una solución SQL:

Decir "aquellos padres cuyos hijos tengan a su vez algún hijo" es
equivalente a decir "aquellos padres que no tengan ningún hijo que a su vez
no tenga ningún hijo".


UPDATE T1
SET estado = 'NuevoEstado'
WHERE
T1.estado <> 'F' AND
NOT EXISTS (
SELECT *
FROM T2
WHERE
T2.idT1 = T1.IdT1 AND
NOT EXISTS (
SELECT *
FROM T3
WHERE T3.idT1 = T2.IdT1 AND T3.idT2 = T2.IdT2
)
)

Saludos:


Jesús López
www.solidq.com




"Martin" escribió en el mensaje
news:
Buenas a todos.

Ante todo quisiera agradecerles por el tiempo que inviertan en leer este
post.

Tengo una estructura de tres tablas:

T1:
idT1
estado (cuyo valor inicial es "L")

T2:
idT1
idT2

T3:
idT1
idT2
idT3

Utilizaré el término "padre" para referirme a T1, "hijo" a T2 y "nieto" a
T3
(a lo mejor, no es lo correcto, pero creo que me ayudará a explicarme
mejor).

Como pueden ver, un "padre" puede tener varios hijos y nietos. El problema
está en que debo cambiar el atributo "estado" a "padre" sí y sólo sí tiene
POR LO MENOS UN nieto por cada hijo y que el estado sea diferente de "F".

Quiero evitar el uso de cursores para recorrer cada hijo y hacer un
"select
count(*)" por cada hijo en la tabla "nieto".

A lo mejor es un problema sencillo. Sólo puedo decir en mi defensa que soy
nuevo en esto, aunque quizás eso no sea excusa.

Repito, agradezco a quienes se hayan tomado la molestia de leer este post.

Buen día a todos.

Preguntas similares