选择计数而不加入

Igo*_*gor 1 mysql join

我正在使用 MySQL。我有三张桌子,每张桌子都有一time列。

通过单个查询,我想计算between两个给定日期的行数。

我不需要表之间的连接(虽然它们是相关的),所以join没有必要。

是否可以?

失败的尝试 #1

SELECT
  COUNT(a.time),
  COUNT(b.time),
  COUNT(c.time)
FROM
  tbl1 AS a,
  tbl2 AS b,
  tbl3 AS c
WHERE
  a.time BETWEEN '2018-03-07 18:32:55' AND '2018-03-07 20:46:55'
AND
  b.time BETWEEN '2018-03-07 18:32:55' AND '2018-03-07 18:46:55'
AND
  c.time BETWEEN '2018-03-07 18:32:55' AND '2018-03-07 18:46:55' ;
Run Code Online (Sandbox Code Playgroud)

Han*_*non 7

这可能需要是一个 UNION 查询,如:

SELECT 'a'
  , COUNT(a.time)
FROM
  tbl1 AS a
WHERE
  a.time BETWEEN '2018-03-07 18:32:55' AND '2018-03-07 20:46:55' 

UNION ALL

SELECT 'b'
  , COUNT(b.time)
FROM
  tbl2 AS b
WHERE
  b.time BETWEEN '2018-03-07 18:32:55' AND '2018-03-07 20:46:55' 

UNION ALL

SELECT 'c'
  , COUNT(c.time)
FROM
  tbl3 AS c
WHERE
  c.time BETWEEN '2018-03-07 18:32:55' AND '2018-03-07 20:46:55' 
Run Code Online (Sandbox Code Playgroud)

输出将如下所示:

???????????????
? 列 1 ? 列 2 ?
???????????????
? 一种 ?10 ?
? 乙?3 ?
? C ?14 ?
???????????????


Ric*_*mes 6

如果你想让它旋转:

SELECT 
    ( SELECT COUNT(*) FROM  tbl1
         WHERE time BETWEEN '2018-03-07 18:32:55'
                        AND '2018-03-07 20:46:55' ) AS a
    ( SELECT COUNT(*) FROM  tbl2
         WHERE time BETWEEN '2018-03-07 18:32:55'
                        AND '2018-03-07 20:46:55' ) AS b
    ( SELECT COUNT(*) FROM  tbl3
         WHERE time BETWEEN '2018-03-07 18:32:55'
                        AND '2018-03-07 20:46:55' ) AS c
;
Run Code Online (Sandbox Code Playgroud)

这给出了类似的东西

  a   b   c
 10   3  14
Run Code Online (Sandbox Code Playgroud)