mysql - 如何计算和连接来自不同数据库的 mySQL 上的两个表?

标签 mysql sql database

我有两个数据库。它们是 corepush

这是来自 core 数据库的 subs 表:

+----+---------+----+----+-----+
| id | service | ad | op | act |
+----+---------+----+----+-----+
| 1  | CHO     | 96 | x  |  1  |
| 2  | CHO     | 98 | x  |  1  |
| 3  | DANG    | 96 | x  |  1  |
| 4  | HOORAY  | 96 | x  |  1  |
| 5  | CHO     | 98 | x  |  1  |
| 6  | DANG    | 96 | x  |  1  |
+----+---------+----+----+-----+

这是来自 push 数据库的 buff 表:

+----+---------+-------+
| id | service |  sub  |
+----+---------+-------+
| 1  | DANG    | daily |
| 2  | HOORAY  | daily |
| 3  | DANG    | daily |
+----+---------+-------+

我想统计subsbuff。我为潜艇做了这个查询:

select service, ad, op, count(1) as sub where act=1 group by service,ad,op;

RESULT:
+---------+----+----+-----+
| service | ad | op | sub |
+---------+----+----+-----+
|  CHOO   | 96 | x  |  1  |
|  CHOO   | 98 | x  |  2  |
|  HOORAY | 96 | x  |  1  |
|  DANG   | 96 | x  |  2  |
+---------+----+----+-----+

这是对 buff 的查询:

select service, count(1) as pushed
from buff a where sub = 'daily'
group by service;

RESULT:
+---------+---------+
| service |  pushed |
+---------+---------+
|  HOORAY |    1    |
|  DANG   |    2    |
+---------+---------+

那么,我的问题是如何连接来自两个不同数据库的这些表? 这是我期望的结果:

 +---------+----+----+-----+--------+
 | service | ad | op | sub | pushed |
 +---------+----+----+-----+--------+
 |  CHOO   | 96 | x  |  1  |    0   |
 |  CHOO   | 98 | x  |  2  |    0   |
 |  HOORAY | 96 | x  |  1  |    1   |
 |  DANG   | 96 | x  |  2  |    2   |
 +---------+----+----+-----+--------+

最佳答案

一个选项是将您当前的两个子查询连接在一起。我在下面使用了完整的外部连接,因为我们想要处理服务可能只出现在 subsbuff 表中,而不是同时出现在两者中的可能性。

SELECT t1.service,
       t1.ad,
       t1.op,
       t1.sub,
       COALESCE(t2.pushed, 0) AS pushed
FROM
(
    SELECT service, ad, op, COUNT(*) AS sub
    FROM subs
    WHERE act = 1
    GROUP BY service,ad,op
) t1
LEFT JOIN
(
    SELECT service, COUNT(1) AS pushed
    FROM buff a
    WHERE sub = 'daily'
    GROUP BY service
) t2
    ON t1.service = t2.service
UNION
SELECT t2.service,
       COALESCE(t1.ad, -1),
       COALESCE(t1.op, -1),
       COALESCE(t1.sub, -1),
       t2.pushed
FROM
(
    SELECT service, ad, op, COUNT(*) AS sub
    FROM subs
    WHERE act = 1
    GROUP BY service,ad,op
) t1
RIGHT JOIN
(
    SELECT service, COUNT(1) AS pushed
    FROM buff a
    WHERE sub = 'daily'
    GROUP BY service
) t2
    ON t1.service = t2.service

关于mysql - 如何计算和连接来自不同数据库的 mySQL 上的两个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42851766/

相关文章:

database - X-Y Fast Trie 在实际应用中的应用

mysql - 无法删除索引或重命名表 PHPmyadmin

c# - C# 控制台应用程序中的 SQL 更新错误

mysql - 从主查询逗号分隔的 id 中获取数据时,子查询返回一行?

sql - 我应该使用什么 SQL 查询?

带有 case 语句的 mysql 查询

sql - 获取 SQL Server 跨数据库依赖关系

java - (SQL + Hibernate) 统计 12 个月前的记录

javascript - 如何显示喜欢/不喜欢 MySQL、NodeJS

php - 自动将外键插入表的简单方法