mysql - 如何获得匹配一列到另一列的索引

时间:2018-05-23 23:03:54

标签: mysql sql

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

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

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

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

也就是说,表2具有与表1相同的ID,但映射到多个名称。我已经为表2中的每个id排序了每组名称(A,B,C)但是如图所示,每个id可能不会映射到所有3.我想为每个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。

编写此查询的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

这样的事情应该有效:

<强> SQL DEMO

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小提琴!