代码之家  ›  专栏  ›  技术社区  ›  curiousgeorge

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

  •  -2
  • curiousgeorge  · 技术社区  · 6 年前

    我有这样一个情况,我有一张表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。我想做一个查询,它为每个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 回复  |  直到 6 年前
        1
  •  2
  •   Wouter van Nifterick Andrey    6 年前

    这样的方法应该有效:

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