我有两个数据库。它们是 core
和 push
。
这是来自 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 |
+----+---------+-------+
我想统计subs
和buff
。我为潜艇做了这个查询:
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 |
+---------+----+----+-----+--------+
最佳答案
一个选项是将您当前的两个子查询连接在一起。我在下面使用了完整的外部连接,因为我们想要处理服务可能只出现在 subs
或 buff
表中,而不是同时出现在两者中的可能性。
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/