mysql - как получить индекс соответствия одного столбца другому - PullRequest
0 голосов
/ 24 мая 2018

У меня есть ситуация, когда у меня есть таблица 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, но сопоставлена ​​с несколькими именами.Я отсортировал каждый набор имен (A, B, C) для каждого идентификатора в таблице 2, но, как показано, каждый идентификатор может не отображаться на все 3. Я хотел бы сделать запрос, который возвращает для каждого идентификатора, индекс значенияв таблице A в группе значений, соответствующих идентификатору в таблице B. То есть я хочу следующую таблицу:

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

Как вы можете видеть для Id = 2, например, таблица 1 имеет имя 'А».В таблице 2 указаны имена 'A' и 'C' для Id = 2. Поскольку 'A' является первым членом списка ['A', 'C'] 1 возвращается в конечном запросе.

Как лучше всего написать этот запрос?

1 Ответ

0 голосов
/ 24 мая 2018

Примерно так должно работать:

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
  • Соединить две таблицы на основе идентификатора.
  • Группировка по t1.id, потому что мы хотим, чтобы в первой таблице была одна строка с идентификатором.
  • Мы объединяем имена из второй таблицы в строку
  • Получить индекс вэта строка, используя find_in_set

Спасибо Хуану Карлосу Оропезе за настройку скрипта SQL!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...