检查表中的ID是否存在于另一个表中,如果存在,则检查多少次

时间:2018-01-21 23:31:01

标签: mysql sql join

假设我有两张桌子

表a

SOME_ID
1
2
3
4

表b

SOME_ID
1
2
1
4

现在我想收到的是像

这样的表格

id 金额

1 | 2
2 | 1

我尝试了以下查询:

SELECT COUNT(a.some_id) as id  
            FROM Table_a  
            INNER JOIN Table_b  
            ON Table_a.some_id = Table.b.some_id  

但是只返回了两个表中有多少个id行 有什么帮助吗?

3 个答案:

答案 0 :(得分:2)

在table_b上进行分组,然后将该结果集加入table_a

SELECT b.* FROM 
(
  SELECT id, COUNT(*) AS Cnt
  FROM Table_b
  GROUP BY id
) b
INNER JOIN Table_a a ON a.id = b.id

<强> SQLFiddle

答案 1 :(得分:1)

如果我理解正确,你需要直方图的直方图:

select cnt, count(*) as num_ids
from (select id, count(*) as cnt
      from b
      group by id
     ) b
group by cnt;

答案 2 :(得分:1)

如果您想要零计数:

SELECT a.some_id AS id, count(b.some_id) as amount
FROM a LEFT JOIN b ON a.some_id = b.some_id
GROUP BY a.some_id

结果:

id | amount  
 1 |  2  
 2 |  1  
 3 |  0  
 4 |  1

如果不是:

SELECT a.some_id AS id, count(*) as amount
FROM a INNER JOIN b ON a.some_id = b.some_id
GROUP BY a.some_id

结果:

id | amount  
 1 |  2  
 2 |  1  
 4 |  1  

不同之处在于连接类型。一旦离开外连接。内连接。请注意,在第一种情况下,使用count(b.some_id)进行计数非常重要。对于count(*),缺少b条目的行将计为1. count(*)计算行数。 count(expression)计算非空值。