Sql 为什么左连接和右连接忽略查询中的某些值?

Sql 为什么左连接和右连接忽略查询中的某些值?,sql,ms-access,left-join,right-join,Sql,Ms Access,Left Join,Right Join,我有一个包含3列的表,其中包含以下值: col1 col2 col3 ------------------- 1 2 8 1 3 5 1 10 15 2 4 6 2 9 7 3 5 6 我连接查询左连接和右连接分组和计数查询 对于每个号码(MS-ACCESS) 结果如下: Num CON1 CON2 CON3 ----------------

我有一个包含3列的表,其中包含以下值:

col1   col2   col3
-------------------
  1      2      8
  1      3      5
  1     10     15
  2      4      6
  2      9      7
  3      5      6
我连接查询左连接和右连接分组和计数查询 对于每个号码(MS-ACCESS)

结果如下:

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
拆分数据,然后按
分组:

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个两次)

结果:

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测试:

您在这里想要实现什么?您的最终预期输出是什么?CON2列的值计数(4、9、10)在最终结果中丢失。请通过编辑而不是注释进行澄清。请不要大喊大叫。请在代码问题中给出一个--cut&paste&runnable代码,包括作为代码输入的最小代表性示例;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。给出你能给出的最少代码,即你显示的代码是OK的,扩展为你显示的代码是不OK的。(调试基础。)用于包含DBMS和DDL(包括约束和索引)的SQL,并将其作为格式化为表的代码输入。说输出是输入的函数。别指望我们猜中了。url只是用来测试的。代码在Access中不起作用吗?如果出现错误,请在这些评论中发布什么?
(
        (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