Получить данные из другой таблицы на основе столбца с объединенными значениями - PullRequest
0 голосов
/ 20 октября 2019

У меня есть две таблицы:

category со столбцами:

id    name
1     business
2     sports
...

article со столбцами:

id   title    categories
1    abc      1|2|3
2    xyz      1|2

Я знаю, что должно бытьотдельная таблица для категорий статей, но мне дали это.

Можно ли написать запрос, который возвращает:

id    title     category_names
1     xyz       business,sports

Я думал о разбиении строки в article -> categories столбец, затем используйте в запросе , чтобы извлечь name из category таблицы, но не смог понять это.

1 Ответ

1 голос
/ 20 октября 2019

Вы должны исправить свою модель данных. Но вы можете сделать это в SQL Server:

select a.*, s.names
from article a cross apply
     (select string_agg(c.name, ',') as names
      from string_split(a.categories, '|') ss join
           category c
           on try_convert(int, ss.value) = c.id
     ) s;

Здесь - это дБ <> скрипка.

Предположительно, вы уже знаете недостатки этой модели данных:

  • SQL Server плохо работает со строками.
  • Числа должны храниться в виде чисел, а не строк.
  • Должны быть правильно объявлены ссылки на внешние ключи.
  • Такие запросы не могут использовать индексы и разделы.
  • Если вы действительно хотите хранить несколько значений в поле, SQL Server предлагает как JSON, так и XML. Строки не правильный подход.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...