es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear una vista que haga referencia a sí misma (recursiva)

Tengo una tabla con las siguientes columnas:

id | fx | valor

Necesito crear una vista con las siguientes columnas:

id | fx | valor | cantidad | fxActualizada | valorActualizado | cantidadActualizada

cantidad = valor * fx -> no hay problema, funciona bien;

fxActualizada = un valor que obtengo de otra tabla con una consulta -> no hay problema, funciona bien;

valorActualizado = un valor que obtengo de otra tabla con una consulta -> no hay problema, funciona bien

cantidadActualizada = necesito hacer que esta columna sea la fxActualizada * valorActualizado de esta vista.

El problema es que no quiero hacer otra consulta a las otras tablas, como lo hice para las columnas anteriores … ¿Hay alguna forma en que pueda referenciar esta vista, para poder hacer algo como esto.fxActualizada * esto.valorActualizado?

Creo que necesito hacer algo recursivo de alguna manera, pero nunca lo he usado realmente y estoy un poco perdido.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para hacer referencia a una vista dentro de sí misma, se puede utilizar una auto-asociación (self-join) en la consulta de la vista. Aquí hay un ejemplo de cómo hacerlo:

    CREATE VIEW my_view AS
    SELECT 
      t1.id, 
      t1.fx, 
      t1.value, 
      t1.value * t1.fx AS amount, 
      t2.fx AS updatedFx, 
      t3.value AS updatedValue, 
      t2.fx * t3.value AS updatedAmount
    FROM my_table t1
    JOIN my_table t2 ON t1.id = t2.id
    JOIN my_other_table t3 ON t1.id = t3.id
    

    En este ejemplo, unimos la tablamy_table con ella misma y la nombramos como t1 y t2. Esto nos permite hacer referencia al valor fx de la otra tabla (t2.fx) sin necesidad de hacer otra consulta.

    Para calcular updatedAmount, también unimos my_table a my_other_table y lo representamos como t3. Luego multiplicamos el valor de fx de t2 con el valor value de t3 para calcular la cantidad actualizada.

    Esto nos permite hacer referencia a la vista dentro de sí misma sin necesidad de consultar las otras tablas nuevamente.

Comments are closed.