sql - Union SUM SQL 必须有自己的别名

标签 sql count union

我已经发表了一些具有相同错误的相关帖子,我已经尝试了几乎所有建议的解决方案。

这是 SQL:

SELECT Sum(h.counter1 + l.counter2) AS hour_amount 
FROM   ( 
          SELECT 1 
          FROM   xp_hour h 
          WHERE  h.account_id = '1' 
          AND    h.hour_date = Date('2017-03-06') 
          AND    (( 
                               h.from_time < Time('06:00') 
                        AND    h.till_time > Time('06:00')) 
                 OR     ( 
                               h.from_time < Time('15:00') 
                        AND    h.till_time > Time('15:00')) 
                 OR     ( 
                               h.from_time = Time('06:00') 
                        AND    h.till_time = Time('15:00')))) 
UNION ALL 
      ( 
             SELECT 1 
             FROM   xp_leave l 
             WHERE  l.account_id = '1' 
             AND    (( 
                                  l.from_datetime < Timestamp('2017-03-06 06:00') 
                           AND    l.till_datetime > Timestamp('2017-03-06 06:00')) 
                    OR     ( 
                                  l.from_datetime < Timestamp('2017-03-06 15:00') 
                           AND    l.till_datetime > Timestamp('2017-03-06 15:00')))) t_union

错误

Error: Every derived table must have its own alias

最佳答案

试试这个:

SELECT SUM(h.counter1 + l.counter2) AS hour_amount 
FROM (   
   SELECT 1 
   FROM xp_hour h 
   WHERE h.account_id = '1' AND h.hour_date = DATE('2017-03-06') AND 
         ( 
          (h.from_time < TIME('06:00') AND h.till_time > TIME('06:00')) OR 
          (h.from_time < TIME('15:00') AND h.till_time > TIME('15:00')) OR 
          (h.from_time = TIME('06:00') AND h.till_time = TIME('15:00'))
         )

   UNION ALL 

   SELECT 1 
   FROM xp_leave l 
   WHERE l.account_id = '1' AND 
       (
         (l.from_datetime < TIMESTAMP('2017-03-06 06:00') AND 
          l.till_datetime > TIMESTAMP('2017-03-06 06:00')) OR 
        (l.from_datetime < TIMESTAMP('2017-03-06 15:00') AND 
         l.till_datetime > TIMESTAMP('2017-03-06 15:00'))
       )
) t_union

您需要将整个 UNION ALL 子查询括在括号中,而不是参与 UNION ALL 操作的各个子查询。

关于sql - Union SUM SQL 必须有自己的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42697552/

相关文章:

mysql - 是否可以将一列引用为多个外键?

c# - 如何从我的 SQL CLR 项目中引用非 SQL CLR 项目?

Mysql查询文章相关评论数

sql - 如何获得命名内部联接的非重复计数?

php - 如何使用 PHP/SQL 构建树形 View ?

java - 使用jdbc连接器在java中的一个查询中进行多个选择-Mysql

java - 统计方法变量实例的方法调用次数

php - 如何使用mysql从多个表中检索数据

mysql - union select and order by 与 mysql

sql - SQL Union“所有其他”行