如何在 from 子句中使用子查询创建视图 - Mariadb
Posted
技术标签:
【中文标题】如何在 from 子句中使用子查询创建视图 - Mariadb【英文标题】:How to create view with subquery in from cluse - Maria DB 【发布时间】:2021-03-08 09:59:12 【问题描述】:你,我正在尝试创建一个视图,但收到以下错误:
1349-View 的 SELECT 在 FROM 子句中包含子查询
我使用服务器版本10.0.12-MariaDB
我应该如何更改我的查询
这是我的查询:
SELECT Q1.NIK, Q1.Enroll
FROM
emp0003,
(SELECT dvc0005.NIK, dvc0005.Enroll FROM dvc0005 UNION DISTINCT SELECT dvc0004.NIK, dvc0004.Enroll FROM dvc0004) AS Q1
WHERE
Emp0003.IsActive = 'T'
AND YEAR(DATE(Q1.Enroll))=YEAR(CURRENT_DATE)
AND emp0003.NIK=Q1.NIK
【问题讨论】:
样本数据、期望的结果以及对结果的清晰解释会有所帮助。 【参考方案1】:我认为您可以在两个子查询之间使用union
来表达这一点:
SELECT d.NIK, d.Enroll
FROM dvc0005 d
WHERE YEAR(DATE(d.Enroll)) = YEAR(CURRENT_DATE) AND
EXISTS (SELECT 1
FROM emp0003 e
WHERE e.NIK = d.NIK AND e.IsActive = 'T'
)
UNION
SELECT d.NIK, d.Enroll
FROM dvc0004 d
WHERE YEAR(DATE(d.Enroll)) = YEAR(CURRENT_DATE) AND
EXISTS (SELECT 1
FROM emp0003 e
WHERE e.NIK = d.NIK AND e.IsActive = 'T'
);
【讨论】:
【参考方案2】:您不能在 from 子句中使用子查询来创建视图。您需要以另一种方式编写它来避免子查询,或者您可以使用多个视图。
首先为子查询创建一个名为 Q1 的视图:
create view Q1 as SELECT dvc0005.NIK, dvc0005.Enroll FROM dvc0005 UNION DISTINCT SELECT dvc0004.NIK, dvc0004.Enroll FROM dvc0004
然后在您的实际查询中使用此视图来创建一个新视图:
SELECT Q1.NIK, Q1.Enroll
FROM
emp0003,
Q1
WHERE
Emp0003.IsActive = 'T'
AND YEAR(DATE(Q1.Enroll))=YEAR(CURRENT_DATE)
AND emp0003.NIK=Q1.NIK
【讨论】:
以上是关于如何在 from 子句中使用子查询创建视图 - Mariadb的主要内容,如果未能解决你的问题,请参考以下文章
ERROR 1349:视图的 SELECT 在 FROM 子句中包含子查询