我有4张表,如下所示
我基本上想知道表1中有多少用户在表2、3和4中。同样,对于表2,我想得到表1、3和4中有多少用户。表3和表4也是如此
基本上所有可能的组合。我想要的最终结果如下
我试图解决的方法之一就是 left-join
的 table1
后面还有其他表格 count
获取输出的第一行。但对所有可能的组合都这样做并不是最佳的。我在寻找其他可能的选择
我的代码是一样的
SELECT
COUNT(DISTINCT A.id) table1,
COUNT(DISTINCT B.id) table2,
COUNT(DISTINCT C.id) table3,
COUNT(DISTINCT D.id) table4
FROM table1 A
LEFT JOIN table2 B
ON A.id = B.id
LEFT JOIN table3 C
ON A.id = C.id
LEFT JOIN table4 D
ON A.id = D.id
db fiddle(这个fiddle是针对mysql的,我正在寻找一种基于sql的通用方法,而不是任何特定于db的方法)
2条答案
按热度按时间lx0bsm1f1#
使用
UNION ALL
演示输出:
flvlnr442#
我建议:
注:假设
id
在每个表中都是唯一的。考虑到列的名称和样本数据,这是一个合理的假设。但是,如果存在重复项,则可以更改union all
在cte中union
.这种结构也很容易推广到其他表。