mysql-如何获取一列与另一列匹配的索引

798qvoo8  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(387)

我有一个这样的情况,我有一个表1:

Id   Name   
---------
1    C  
2    A  
3    B 
4    B  
5    B    
6    A

我有一个这样的表2(这里的id,name与表1中的id,name相同):

Id   Name   
---------
1    A
1    B
1    C  
2    A 
2    C  
3    B    
4    A 
4    B
5    B
6    A

也就是说,表2的id与表1相同,但Map到多个名称。我已经为表2中的每个id对每组名称(a、b、c)进行了排序,但如图所示,每个id可能不会Map到所有3个id。我想做一个查询,为每个id返回表a中与表b中id对应的值组中的值的索引。也就是说,我想要下表:

Id   Name   
---------
1    3  
2    1  
3    1 
4    2  
5    1    
6    1

例如,您可以看到,对于id=2,表1的名称为“a”。表2中id=2的名称为“a”和“c”。由于'a'是列表的第一个成员,['a','c']1在最终查询中返回。
编写此查询的最佳方法是什么?

okxuctiv

okxuctiv1#

这样的方法应该有用:
sql演示

select 
  t1.id as Id, 
  find_in_set(t1.name, group_concat(t2.Name order by t2.id)) as Name
from source t1
join target t2 on t1.id=t2.id
group by t1.id

根据id连接两个表。
按t1.id分组,因为我们希望第一个表中每个id有一行。
我们将第二个表中的名称串联成一个字符串
使用获取该字符串中的索引 find_in_set 感谢juan carlos oropeza设置了一个sql小提琴!

相关问题