我有两个表,其中一个具有唯一的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仅处理一次?
答案 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