SELECT в предложении FORM для создания представления - PullRequest
0 голосов
/ 15 мая 2018

У меня есть этот запрос, который мне нужно сделать с:

CREATE VIEW view_user_data AS
SELECT 
    u.uid AS uid, 
    u.name AS name,     
    (coalesce(value1, 0) + coalesce(value2, 0)) AS total_value, 
    (
        SELECT 
            value 
        FROM table3 
        WHERE value > total_value 
        LIMIT 1
    ) - 1 AS value,
FROM users AS u 
LEFT OUTER JOIN 
    (
        SELECT 
            a.id AS id, 
            ROUND(SUM(a.value * a.multiplier),0) AS value1 
        FROM table1 AS a 
        GROUP BY a.uid
    ) join1 ON u.uid = join1.uid 
LEFT OUTER JOIN 
    (
        SELECT 
            b.id AS id,
            ROUND(SUM(b.value * b.multiplier),0) AS value2 
        FROM table2 AS b 
        GROUP BY b.uid
    ) join2 ON u.uid = join2.uid 
ORDER BY uid

Когда я пытаюсь получить это сообщение:

#1349 - View's SELECT contains a subquery in the FROM clause

Нет SELECT ни в одном измои пункты ИЗ?Что это значит?Или select в JOINS также не поддерживается?

Вопрос в том, могу ли я сделать это представление возможным?

1 Ответ

0 голосов
/ 15 мая 2018

Вам следует избегать создания подвыбора, поскольку в качестве представлений необходим необходимый выбор

  CREATE VIEW join1 AS 
    SELECT 
      a.id AS id, 
      ROUND(SUM(a.value * a.multiplier),0) AS value1 
    FROM table1 AS a 
    GROUP BY a.uid
  ;


  CREATE VIEW join2 AS 
    SELECT 
        b.id AS id,
        ROUND(SUM(b.value * b.multiplier),0) AS value2 
    FROM table2 AS b 
    GROUP BY b.uid
  ; 

  CREATE VIEW view_value AS 
    SELECT 
        value 
    FROM table3 
    WHERE value > total_value 
    LIMIT 1 
  ;


  CREATE VIEW view_user_data AS
  SELECT 
      u.uid AS uid, 
      u.name AS name,     
      (coalesce(value1, 0) + coalesce(value2, 0)) AS total_value, 
      view_value.value -1 as value,
  FROM users AS u
  CROSS JOIN  view_value 
  LEFT OUTER JOIN join1 ON u.uid = join1.uid 
  LEFT OUTER JOIN join2 ON u.uid = join2.uid 
  ORDER BY uid
...