我有这个查询我需要用:
创建一个视图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中选择也不受支持?
问题是 - 有没有办法让这种观点成为可能?
答案 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