我已经发表了一些具有相同错误的相关帖子,我已经尝试了几乎所有建议的解决方案。
这是 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/