错误在MariaDB中的IFNULL中包含选择

时间:2016-09-23 15:54:50

标签: sql mariadb moodle

我在MariaDB中创建了一个视图,但我无法在几个字段中使用它。目前这是有效的:

    (   SELECT  DISTINCT IFNULL(grades.`grade`,'No Grade')
            FROM  `table` grades
            WHERE  userinfo.`id` = grades.`id`
              AND  grades.`Item Name` = 'SOMEINFO'
    ) 'SOMENAME', 

但我需要添加一个选择,其中没有等级'是,采用以下形式

    (   SELECT  DISTINCT IFNULL( grades.`grade`, 
                SELECT  IF( EXISTS
                            (   SELECT  *
                                    FROM  `another_table`
                                    WHERE  userid = 365
                                      AND  courseid = 2
                            ), 'Enrolled', 'Not enrolled'
                          )
                               )
            FROM  `table` grades
            WHERE  userinfo.`id` = grades.`id`
              AND  grades.`Item Name` = 'SOMEINFO'
    ) 'SOMENAME', 

我知道

SELECT  IF( EXISTS( SELECT  *
                    FROM  `another_table`
                    WHERE  userid = 365
                      AND  courseid = 2
                  ),
           'Enrolled', 'Not enrolled'
          ) 

也在努力,但现在整个事情都给了我一个错误,所以任何建议都会非常感激

由于

1 个答案:

答案 0 :(得分:0)

这看起来像子查询:

(SELECT DISTINCT IFNULL(grades.`grade`,
                        SELECT IF( EXISTS (SELECT * 
                                           FROM `another_table`
                                           WHERE userid = 365 AND courseid = 2
                                          ), 'Enrolled', 'Not enrolled'
                                 )
                       )
 FROM `table` grades
 WHERE userinfo.`id` = grades.`id` AND
       grades.`Item Name` = 'SOMEINFO'
) as SOMENAME,

您正在使用一个子查询,该子查询在需要标量子查询的位置返回两列。标量子查询最多返回一行中的一列。

不幸的是,由于视图的限制,没有简单的方法可以在MySQL中执行您想要的操作。我建议你重写逻辑,以便使用exists子句中的left join来处理from