如何在 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的主要内容,如果未能解决你的问题,请参考以下文章

View 的 SELECT 包含 FROM 子句中的子查询

我无法在 FROM 子句中创建包含子查询的视图

MySql VIEW 删除 FROM 条件下的子查询

ERROR 1349:视图的 SELECT 在 FROM 子句中包含子查询

MYSQL 获取最低值的记录 | View 的 SELECT 包含 FROM 子句中的子查询

ERROR 1349 (HY000): View 的 SELECT 在 FROM 子句中包含子查询