我有一种情况,我有这样的表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。
编写此查询的最佳方法是什么?
答案 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
find_in_set
感谢Juan Carlos Oropeza设置SQL小提琴!