在如何为这种情况构造我的sql时遇到麻烦。
我有3张桌子:
人员表:
ID
--
A
FACT_1表:
Person_ID DAY metric
--------------------
A 1 x
A 2 y
FACT_2表:
Person_ID DAY metric
--------------------
A 3 a
A 2 b
我希望结果是:
Person_ID DAY metric1 metric2
-----------------------------
A 1 x [null]
A 2 y b
A 3 [null] a
因此,这就像个人ID和日期分别与每个事实表的外部联接..但是当个人和日期相同时,我需要将两个指标捆绑在一起。
事实表可能很大,因此请记住这一点。
抱歉,格式化..不熟悉
最佳答案
除非从Person表中获取其他数据,否则此查询不需要它。如果需要,您可以将其加入UNION。
SELECT
u.Person_ID
,u.DAY
,MAX(u.metric1) AS metric1
,MAX(u.metric2) AS metric2
FROM
(
SELECT
f1.Person_ID
,f1.DAY
,f1.metric AS metric1
,NULL AS metric2
FROM
Fact_1 AS f1
UNION ALL
SELECT
f2.Person_ID
,f2.DAY
,NULL AS metric1
,f2.metric AS metric2
FROM
Fact_2 AS f2
) AS u
GROUP BY
u.Person_ID
,u.DAY
Results:
+-----------+-----+---------+---------+
| Person_ID | DAY | metric1 | metric2 |
+-----------+-----+---------+---------+
| A | 1 | x | NULL |
| A | 2 | y | b |
| A | 3 | NULL | a |
+-----------+-----+---------+---------+
关于mysql - MySQL中内部联接和外部联接的混合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51382133/