对于表中每个不同的id,计算不同表中相关UID的数量((sql)

rm5edbpk  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(319)

我有两个表,其中一个有唯一的ID,另一个没有,有点像这样:


**Table1**

ID     OTHERSTUFF
id1    ...
id1    ...
id2    ...
id2    ...
id3    ...

**Table2**

UID    MORESTUFF
uid1   ...
uid2   ...
uid3   ...

每个id都显示为uid的子字符串,但它们可能出现在多个中,我想计算一下有多少个。
我尝试了以下查询(没有给出我想要的结果):

select distinct ID, count(Table2.UID) 
from Table1
inner join Table2 on locate(ID, Table2.UID) > 0
group by ID

我希望这样做的是:对于表1中每个不同的id,计算表2中uid包含有问题的id的条目数。
我认为最终会发生的是,对于每个id,它最终会计数(#对应的uid)x(#出现次数),然后返回不同(id,count)对的列表。事实上,我得到的结果有多个id,它们的数量相当大,但是当我查询包含这些特定id的uid时,每个id只得到1个。
我应该如何以不同的方式编写查询,以便每个不同的id只处理一次?

8dtrkrch

8dtrkrch1#

如果uid是由id组成的字符串,可以尝试使用like和table作为基表

select t2.uid, count(*)
from table2 t2
inner join table1 t1  on  t2.uid like  concat('%',t1.id)
group by t2.uid
c3frrgcw

c3frrgcw2#

首先需要在子查询中获取不同的id值:

select t1.ID, count(Table2.UID) 
from (SELECT DISTINCT ID FROM Table1) AS t1
inner join Table2 on locate(t1.ID, Table2.UID) > 0
group by t1.ID;

或者,您可以通过使用 COUNT(DISTINCT Table2.UID) 在原始查询中。

相关问题