用于视图创建的FORM子句中的SELECT

时间:2018-05-15 18:31:47

标签: mysql views

我有这个查询我需要用:

创建一个视图
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

我的任何FROM子句中都没有SELECT?那是什么意思?或者在JOINS中选择也不受支持?

问题是 - 有没有办法让这种观点成为可能?

1 个答案:

答案 0 :(得分:1)

您应该避免subselect创建必要的subselect作为视图

  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