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.

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Alejandro Mesa
10/01/2008 - 18:08 | Informe spam
Martin,

Que pasa si un padre tiene 2 hijos, pero solo uno de ellos tiene
descendientes, se considera la fila en T1 como "padre" si o no?

En otras palabras, en tu descripcion planteas que:

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".



Fijate en la condicion <sí y sólo sí tiene POR LO MENOS UN nieto por cada
hijo>


AMB

"Martin" wrote:

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.
Respuesta Responder a este mensaje
#3 Martin
10/01/2008 - 18:27 | Informe spam
Que pasa si un padre tiene 2 hijos, pero solo uno de ellos tiene
descendientes, se considera la fila en T1 como "padre" si o no?



Sí, se consideraría a la fila en T1 como padre, pero un padre al cual no se
le puede cambiar el estado.

Creo la solución la planteó Jesús Lopez. Ahora mismo estoy tratando de
adecuarlo al problema real.

Gracias por invertir tu tiempo en leer mi post.
Respuesta Responder a este mensaje
#4 Martin
10/01/2008 - 18:33 | Informe spam
Como le dije al señor Alejandro Mesa, ahora mismo estoy adecuando tu
respuesta al problema real. Tuve que simplificar varias cosas para hacer más
sencilla la pregunta y se me entendiera con más facilidad.

Creo que tu planteamiento es correcto y sí va a funcionar. Ni bien termine
de probarlo marcaré tu respuesta para que otros puedan beneficiarse de la
misma.

Gracias por tu tiempo.
Respuesta Responder a este mensaje
#5 Martin
10/01/2008 - 23:14 | Informe spam
Gracias por tu tiempo. Funcionó.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida