문제

예를 들어 두 개의 계산 된 필드가있는 뷰를 어떻게 정의 할 수 있습니까?

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

... 그리고 처음 두 계산 된 필드를 기반으로 한 세 번째 계산 필드를 만듭니다.

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

...?

처음 두 계산 된 필드를 이름으로 참조하면 필드를 알 수 없다는 메시지가 표시됩니다.

감사!

도움이 되었습니까?

해결책

시야에서 하위 쿼리가 허용되지 않으므로 여러 뷰를 만들어 시뮬레이션해야합니다.

예를 들어이 쿼리는 직접 실행되면 문제를 해결합니다.

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;

에 따르면 MySQL 문서 뷰는 From Clause에 하위 쿼리를 포함 할 수 없다는 제한이 있습니다. 이 제한을 해결 하고이 쿼리를보기로 바꾸려면 마지막으로 원하는 필드의 조합을 제공하는 마지막 뷰 (각 하위 퀘스트마다 하나)로 나눕니다.

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;

다른 팁

... 처음 두 계산 된 필드를 기반으로 한 세 번째 계산 필드를 만듭니다 ...

찾은 것처럼 동일한 선택에서 계산 된 열을 참조 할 수 없습니다. 귀하의 옵션은 다음과 같습니다.

논리를 복제하십시오

MySQL은 몇 가지 이상한 이유로보기에서 하위 쿼리를 지원하지 않습니다.

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

보기를 겹쳐보세요

최소 권장 옵션 ...

 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

불행히도, 당신이하려는 것은 실제로 당신이하는 방식으로 불가능합니다. 일반적으로 MySQL보기는 스크립트 선택으로 볼 수 있습니다. 보기 결과는 데이터베이스에 소스와 분리 된 데이터베이스에 저장되지 않지만 뷰를 참조 할 때 계산됩니다.

대부분의 경우 MySQL은보기에서 선택할 때 병합 알고리즘을 사용합니다. 즉, 뷰의 정의와 뷰를 참조하는 SELECT 문은 실제로 실행되는 최종 선택을 생성합니다. 따라서, 당신은 실제로 자신을 참조 할 수 없습니다.

여기에서 귀하의 옵션은 (1) 합을 만들기 위해 첫 번째보기를 나타내는 두 번째보기를 정의하거나 (2) 합계를 다음과 같이 작성하는 것입니다.

('TableName'.'BlueSquares' + 'TableName'.'RedSquares' + 'TableName'.'BlueCirles' + 'TableName'.'RedCircles') AS TotalShapes
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top