#sql #database #singlestore
Вопрос:
Допустим, нам даны две таблицы: зоопарк и животные. зоопарк содержит строку целых чисел, представляющих идентификаторы животных, например: «1,2,3», и соответствующую таблицу для животных: 1:»игуана» и т. Д.
create table zoo (zooid int, animals varchar(10)); insert into zoo values (1,'1,2'),(2,'1,2,4'); create table animals (animalid int, animal varchar(10)); insert into animals values (1,'Bear'),(2,'Wolf'),(3,'Pig'),(4,'Lion');
Как кто-то может объединить эти две таблицы таким образом, чтобы для идентификатора зоопарка в столбцах «Животные» был varchar(100) «Медведь, лев»? Например:
зооид | Животные |
---|---|
1 | «Медведь, Волк» |
2 | «Медведь, Волк, Лев» |
Используя MySQL, вы, вероятно, могли бы использовать FIND_IN_SET (), но мы используем одно хранилище. Я знаю, что данные не нормализованы, но, к сожалению, у меня нет права голоса в этом вопросе. Спасибо!
Комментарии:
1. Никогда не храните несколько значений в одном столбце.
Ответ №1:
Вы можете сделать это с помощью встроенных модулей РАЗДЕЛЕНИЯ и ТАБЛИЦЫ. РАЗДЕЛЕНИЕ-это встроенная функция, которая позволяет преобразовать список, разделенный запятой (или другим разделителем), в массив, а затем в таблицу, которая преобразует его в отношение:
select zooid, group_concat(animal) from zoo join TABLE(SPLIT(zoo.animals,',')) join animals on animalid = table_col group by 1