Pregunta

¿Cómo puedo definir una vista que tiene dos campos calculados, por ejemplo ...

 ('TableName'.'BlueSquares' + 'TableName'.'RedSquares') AS TotalSquares, ('TableName'.'BlueCirles' + 'TableName'.'RedCircles') AS TotalCircles

... y crear un tercer campo calculado que se basa en los dos primeros campos calculados, como en ...

 ('ViewName'.'TotalSquares' + 'ViewName'.'TotalCircles') AS TotalShapes

...?

Cuando me refiero a los dos primeros campos calculados por su nombre, aparece un mensaje de que los campos son desconocidos.

Gracias!

¿Fue útil?

Solución

Desde subconsultas no están permitidos en las vistas, necesitará para simular mediante la creación de múltiples puntos de vista.

Por ejemplo, esta consulta va a resolver su problema si se ejecuta directamente:

SELECT 
    TotalCircles + TotalSquares AS TotalShapes
FROM
    (SELECT 
        BlueCirles + RedCircles AS TotalCircles,
        BlueSquares + RedSquares AS TotalSquares
    FROM
        (SELECT
            2 AS BlueCirles,
            3 AS RedCircles,
            4 AS BlueSquares,
            5 AS RedSquares
        ) AS shapes
    ) as totals;

De acuerdo con la documentación vistas MySQL tener la restricción de no ser capaz de contener subconsultas en la cláusula FROM. Para evitar esta limitación y convertir esta consulta en una vista, dividirla en 3 vistas (una para cada subconsulta) con el último que da la combinación deseada de campos:

CREATE VIEW shapes AS
SELECT
    2 AS BlueCirles,
    3 AS RedCircles,
    4 AS BlueSquares,
    5 AS RedSquares;

CREATE VIEW totals AS
SELECT 
    BlueCirles + RedCircles AS TotalCircles,
    BlueSquares + RedSquares AS TotalSquares
FROM
    shapes;

CREATE VIEW result AS
SELECT 
    TotalCircles + TotalSquares AS TotalShapes
FROM
    totals;

SELECT * FROM result;

Otros consejos

  

... crear un tercer campo calculado que se basa en los dos primeros campos calculados ...

A medida que ha encontrado, no se puede hacer referencia a columnas calculadas en el mismo SELECT. Sus opciones son:

Duplicar la lógica

MySQL no soporta subconsultas en las vistas por alguna razón extraña:

CREATE OR REPLACE VIEW your_view AS
SELECT t.BlueSquares + t.RedSquares AS TotalSquares, 
       t.BlueCirles + t.RedCircles AS TotalCircles,
       t.BlueSquares + t.RedSquares + t.BlueCirles + t.RedCircles AS TotalShapes
  FROM TABLE t

Capa las Vistas

opción menos recomendable ...

 CREATE OR REPLACE VIEW initial_view AS
    SELECT t.BlueSquares + t.RedSquares AS TotalSquares, 
           t.BlueCirles + t.RedCircles AS TotalCircles,
      FROM TABLE

 CREATE OR REPLACE VIEW layered_view AS
    SELECT iv.TotalSquares + iv.TotalCircles AS TotalShapes
      FROM initial_view iv

Por desgracia, lo que estamos tratando de hacer no es realmente posible la forma en que lo está haciendo. En general, los puntos de vista de MySQL pueden ser vistos como un SELECT guión. Los resultados de un punto de vista no se almacenan en la base de datos separada de su fuente, sino más bien se calculan cuando se hace referencia a la vista.

La mayoría de las veces, MySQL utiliza el algoritmo MERGE Cuando se selecciona desde un punto de vista. Esto significa que se fusiona la definición de la vista y la instrucción SELECT en referencia a la vista para crear una final SELECCIONAR que realmente funciona. Como tal, realmente no se puede tener una visión se refiere a sí mismo.

Sus opciones aquí son: (1) definir un segundo punto de vista, que se refiere a la primera vista con el fin de crear su suma, o (2) escribir la escritura corriente suma de esta manera:

('TableName'.'BlueSquares' + 'TableName'.'RedSquares' + 'TableName'.'BlueCirles' + 'TableName'.'RedCircles') AS TotalShapes
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top