[英]Why do left and right join ignore some values in a query?
我有一個包含 3 列的表和這些值:
col1 col2 col3
-------------------
1 2 8
1 3 5
1 10 15
2 4 6
2 9 7
3 5 6
我加入查詢 LEFT JOIN 和 RIGHT JOIN 對每個數字 (MS-ACCESS) 的分組和計數查詢。
SELECT Col1 AS Num, t1.CON1, t2.CON2, t3.CON3
FROM
(((SELECT col1, COUNT(col1) AS CON1 FROM table GROUP BY col1) AS t1
LEFT JOIN (SELECT col2, COUNT(col2) AS CON2 FROM table GROUP BY col2) AS t2
ON t1.col1 = t2.col2)
LEFT JOIN (SELECT col3, COUNT(col3) AS CON3 FROM table GROUP BY col3) AS t3
ON t2.col2 = t3.col3)
UNION
SELECT col3 AS Num, t1.CON1, t2.CON2, t3.CON3
FROM
(((SELECT col1, COUNT(col1) AS CON1 FROM table GROUP BY col1) AS t1
RIGHT JOIN (SELECT col2, COUNT(col2) AS CON2 FROM table GROUP BY col2) AS t2
ON t1.col1 = t2.col2)
RIGHT JOIN (SELECT col3, COUNT(col3) AS CON3 FROM table GROUP BY col3) AS t3
ON t2.col1 = t3.col3)
結果如下:
Num CON1 CON2 CON3
--------------------------
1 3
2 2 1
3 1 1
5 1 1
6 2
7 1
8 1
15 1
但是此查詢忽略了表第 2 列中的值計數
Num CON2
---------------
4 1
9 1
10 1
我的查詢中缺少什么?
如果要計算每列中的每個值和次數,請使用union all
拆分數據,然后group by
:
select num, sum(col1), sum(col2), sum(col3)
from ((select col1 as num, 1 as col1, 0 as col2, 0 as col3
from t
) union all
(select col2 as num, 0 as col1, 1 as col2, 0 as col3
from t
) union all
(select col3 as num, 0 as col1, 0 as col2, 1 as col3
from t
)
) as x
group by num
order by num;
這給出了正確的總數,但我不知道如何總結結果(例如,它列出了 3 次)......
(
(SELECT col1 as num, COUNT(col1) AS CON1, null as CON2, null as CON3 FROM mytable t1
LEFT JOIN (SELECT col2, COUNT(col2) AS CON2 FROM mytable GROUP BY col2) t2
ON t1.col1 = t2.col2
LEFT JOIN (SELECT col3, COUNT(col3) AS CON3 FROM mytable GROUP BY col3) t3
ON t2.col2 = t3.col3
GROUP BY t1.col1)
UNION
(SELECT col2 as num, null as CON1, COUNT(col2) AS CON2, null as CON3 FROM mytable t4
left JOIN (SELECT col1, COUNT(col1) AS CON1 FROM mytable GROUP BY col1) t5
ON t4.col2 = t5.col1
left JOIN (SELECT col3, COUNT(col3) AS CON3 FROM mytable GROUP BY col3) t6
ON t4.col2 = t6.col3
GROUP BY t4.col2)
UNION
(SELECT col3 as num, null as CON1, null as CON2, COUNT(col3) AS CON3 FROM mytable t7
left JOIN (SELECT col1, COUNT(col1) AS CON1 FROM mytable GROUP BY col1) t8
ON t7.col3 = t8.col1
left JOIN (SELECT col2, COUNT(col2) AS CON3 FROM mytable GROUP BY col2) t9
ON t7.col3 = t9.col2
GROUP BY t7.col3)
)
結果:
num CON1 CON2 CON3
1 3
2 1
2 2
3 1
3 1
4 1
5 1
5 1
6 2
7 1
8 1
9 1
10 1
15 1
... 任何人?
SQL 測試: https://sqltest.net/#979886
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.