对于表中的每个唯一ID,请计算不同表中相关UID的数量。 (SQL)

时间:2019-01-08 19:26:48

标签: mysql

我有两个表,其中一个具有唯一的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,计数)对的列表。确实,我得到的结果具有多个ID,它们的计数非常大,但是当我查询包含这些特定ID的UID时,每个ID只会得到1。

我应该如何以不同的方式编写查询,以便每个唯一的ID仅处理一次?

2 个答案:

答案 0 :(得分:1)

您首先需要在子查询中获取不同的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)来忽略重复的联接(但也可能无意中存在来自table2的重复匹配)。

答案 1 :(得分:0)

如果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