【发布时间】:2017-10-30 19:05:36
【问题描述】:
我试图在两个子查询中使用连接和联合。这是我的查询:
SELECT Service,SP.Second_Period, SP.TRX_SP,FP.First_Period,FP.TRX_FP
FROM (((SELECT Service, SUM(Processed) as Second_Period, COUNT(Processed) as TRX_SP
FROM pay
WHERE Status1='Processed' AND Dataime BETWEEN '2017-05-07 00:00:00' and '2017-05-14 00:00:00'
GROUP BY Service) SP
RIGHT JOIN
(SELECT Service, SUM(Processed) as First_Period, COUNT(Processed) as TRX_FP
FROM pay
WHERE Status1='Processed' AND Dataime BETWEEN '2017-05-01 00:00:00' and '2017-05-06 00:00:00'
GROUP BY Service) FP USING (Service))
UNION ALL
((SELECT Service, SUM(Processed) as Second_Period, COUNT(Processed) as TRX_SP
FROM pay
WHERE Status1='Processed' AND Dataime BETWEEN '2017-05-07 00:00:00' and '2017-05-14 00:00:00'
GROUP BY Service) SP
LEFT OUTER JOIN
(SELECT Service, SUM(Processed) as First_Period, COUNT(Processed) as TRX_FP
FROM pay
WHERE Status1='Processed' AND Dataime BETWEEN '2017-05-01 00:00:00' and '2017-05-06 00:00:00'
GROUP BY Service) FP USING (Service) )) as tbl2
WHERE SP.Service=FP.Service
GROUP BY Service
Order BY Service
这样做会返回给我这个错误:
1064 - 您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解正确使用的语法
'LEFT OUTER JOIN (SELECT Service, SUM(Processed) as First_Period, COUNT(第 16 行处理'
我做错了什么?我使用左和右连接和联合,因为我不能在 mysql 中使用完全外连接。
更新
这里是用 DAYNAME(Dataime) 代替 Service 的 ny 代码
SELECT *
FROM (
(
SELECT * FROM
(SELECT DAYNAME(Dataime), SUM(Processed) as Second_Period, COUNT(Processed) as TRX_SP
FROM pay
WHERE Status1='Processed' AND Dataime BETWEEN '2017-05-07 00:00:00' and '2017-05-14 00:00:00'
GROUP BY DAYNAME(Dataime)) SP
RIGHT JOIN
(SELECT DAYNAME(Dataime), SUM(Processed) as First_Period, COUNT(Processed) as TRX_FP
FROM pay
WHERE Status1='Processed' AND Dataime BETWEEN '2017-05-01 00:00:00' and '2017-05-06 00:00:00'
GROUP BY DAYNAME(Dataime)) FP USING (DAYNAME(Dataime)))
UNION ALL
(
SELECT * FROM
(SELECT DAYNAME(Dataime), SUM(Processed) as Second_Period, COUNT(Processed) as TRX_SP
FROM pay
WHERE Status1='Processed' AND Dataime BETWEEN '2017-05-07 00:00:00' and '2017-05-14 00:00:00'
GROUP BY DAYNAME(Dataime)) SP
LEFT OUTER JOIN
(SELECT DAYNAME(Dataime), SUM(Processed) as First_Period, COUNT(Processed) as TRX_FP
FROM pay
WHERE Status1='Processed' AND Dataime BETWEEN '2017-05-01 00:00:00' and '2017-05-06 00:00:00'
GROUP BY DAYNAME(Dataime)) FP USING (DAYNAME(Dataime)) )) as tbl2
GROUP BY DAYNAME(Dataime)
Order BY DAYNAME(Dataime)
这是错误:
1064 - 您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解正确使用的语法
near '(Dataime))) UNION ALL (
【问题讨论】:
-
如果单独执行第二个查询,它工作正常吗?
-
@DarshanMehta 是的,它有效。我已经单独尝试了两个子查询,它们都有效。