如何在mysql中使用join和union进行子查询

伊琳娜

我试图在两个子查询中使用连接和联合。这是我的查询:

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(Processe' at line 16)

我究竟做错了什么?由于我无法在 mysql 中使用完全外部联接,因此我正在使用左右联接与联合。

更新

这是将 Service 替换为 DAYNAME(Dataime) 的纽约代码

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 服务器版本相对应的手册以了解要使用的正确语法

附近 '(Dataime))) UNION ALL (

达山·梅塔

您需要进行一些更改才能使此查询正常工作:

  • 将内部SELECT查询包装到另一个SELECT *查询中以使其JOIN工作,例如() SP LEFT JOIN () SP不是有效的语法。相反,使用SELECT * FROM (..) SP JOIN (..) FP
  • 删除SP.*从外部SELECTSPFP只对内部查询可见,使用SELECT *替代
  • 再次WHERE SP.Service=FP.Service从外部WHERE子句中删除SP并且FP将不可见。

以下查询应该有效:

SELECT *
FROM (
(
SELECT * 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 * 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
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
GROUP BY Service
Order BY Service

更新

您不能在USING子句中使用函数,因此您需要为该列设置别名并在 中使用别名USING,例如:

SELECT *
FROM (
(
SELECT * FROM
(SELECT DAYNAME(Dataime) as 'day', 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) as 'day', 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(`day`))
UNION ALL
(
SELECT * FROM
(SELECT DAYNAME(Dataime) as `day`, 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) as `day`, 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 (`day`) ))  as tbl2
GROUP BY `day`
Order BY `day`

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在NOT IN MySQL中使用UNION子查询

来自分类Dev

如何在SQL中使用JOIN编写子查询

来自分类Dev

如何在PostgreSQL中使用子查询进行更新

来自分类Dev

如何在MySQL中使用正则表达式单词“ IN”和“ INNER JOIN”进行选择?

来自分类Dev

如何在视图中使用MySQL UNION和SUM

来自分类Dev

如何在子查询中使用多个 sum 和 group by?

来自分类Dev

如何在 MySQL 的 FROM 子句中使用子查询?

来自分类Dev

如何在mysql UNION子查询中对数据进行排序?

来自分类Dev

对 JOIN 和 UNION 以及子查询使用相同的“WHERE”子句

来自分类Dev

MySQL:查询UNION,使用条件WHERE进行JOIN

来自分类Dev

如何在Rails 4中使用Join而不是子查询来编写此ActiveRecord查询

来自分类Dev

如何在MySQL中使用GROUP BY和条件进行计数

来自分类Dev

如何在子查询中使用ORDER BY

来自分类Dev

如何在子查询中使用COUNT()

来自分类Dev

如何在SQL中使用子查询?

来自分类Dev

如何在子查询中使用 Count?

来自分类Dev

在继承案例中使用 UNION 和 JOIN - MySQL

来自分类Dev

我如何使用Join而不是子查询进行后续查询?

来自分类Dev

如何使用主查询中的LEFT JOIN和子查询中的INNER JOIN优化MySQL SELECT查询?

来自分类Dev

如何在带有IN子句和子查询的查询中使用多个LIKE语句?

来自分类Dev

如何在MySQL中使用子查询为报表优化多个联接的查询

来自分类Dev

如何在 mysql 的 Group_concat 子查询中使用选择查询

来自分类Dev

如何在Yii2中使用ActiveQuery进行子查询

来自分类Dev

如何在Yii2中使用ActiveQuery进行子查询

来自分类Dev

mysql查询与Join和union all

来自分类Dev

在子查询中使用UNION ALL分组

来自分类Dev

如何使用MySQL子查询和GROUP BY

来自分类Dev

如何在MySQL查询中使用Regexp?

来自分类Dev

如何在 MySQL 查询中使用 INCLUDE?

Related 相关文章

  1. 1

    在NOT IN MySQL中使用UNION子查询

  2. 2

    如何在SQL中使用JOIN编写子查询

  3. 3

    如何在PostgreSQL中使用子查询进行更新

  4. 4

    如何在MySQL中使用正则表达式单词“ IN”和“ INNER JOIN”进行选择?

  5. 5

    如何在视图中使用MySQL UNION和SUM

  6. 6

    如何在子查询中使用多个 sum 和 group by?

  7. 7

    如何在 MySQL 的 FROM 子句中使用子查询?

  8. 8

    如何在mysql UNION子查询中对数据进行排序?

  9. 9

    对 JOIN 和 UNION 以及子查询使用相同的“WHERE”子句

  10. 10

    MySQL:查询UNION,使用条件WHERE进行JOIN

  11. 11

    如何在Rails 4中使用Join而不是子查询来编写此ActiveRecord查询

  12. 12

    如何在MySQL中使用GROUP BY和条件进行计数

  13. 13

    如何在子查询中使用ORDER BY

  14. 14

    如何在子查询中使用COUNT()

  15. 15

    如何在SQL中使用子查询?

  16. 16

    如何在子查询中使用 Count?

  17. 17

    在继承案例中使用 UNION 和 JOIN - MySQL

  18. 18

    我如何使用Join而不是子查询进行后续查询?

  19. 19

    如何使用主查询中的LEFT JOIN和子查询中的INNER JOIN优化MySQL SELECT查询?

  20. 20

    如何在带有IN子句和子查询的查询中使用多个LIKE语句?

  21. 21

    如何在MySQL中使用子查询为报表优化多个联接的查询

  22. 22

    如何在 mysql 的 Group_concat 子查询中使用选择查询

  23. 23

    如何在Yii2中使用ActiveQuery进行子查询

  24. 24

    如何在Yii2中使用ActiveQuery进行子查询

  25. 25

    mysql查询与Join和union all

  26. 26

    在子查询中使用UNION ALL分组

  27. 27

    如何使用MySQL子查询和GROUP BY

  28. 28

    如何在MySQL查询中使用Regexp?

  29. 29

    如何在 MySQL 查询中使用 INCLUDE?

热门标签

归档