SQL L oop через строку, найдите идентификатор и сделайте из него представление - PullRequest
0 голосов
/ 13 июля 2020

Столбцы [Product] таблицы A: ProductID, Name и Price。

Столбцы [Favorite] таблицы B: ListID, ListName, ListContents

B.ListContents содержат список идентификаторов, разделенный на "," Exp: 1,2,5,6,8

Теперь я хочу создать представление, которое l oop через каждое значение B.ListContents, извлечь число и найти соответствующее ему " ProductID "" Название "" Цена "из таблицы A。

Результат должен быть таким:

введите описание изображения здесь

Я знаю, как справиться с этим с c# с помощью .Split (',') ,, но не знаю, как справиться с этим на SQL。

И, кстати, как лучше назвать эту проблему на английском sh? (Я ESL), Спасибо.

Изменить: я использовал Azure SQL. SSMS v18.5.1

1 Ответ

3 голосов
/ 13 июля 2020

Вы можете использовать string_split():

select f.listid, p.*
from favorites f cross apply
     string_split(f.listcontents) s  join
     products p
     on p.productid = s.value;

Тогда вам следует исправить модель данных! Модель данных не работает, не работает, не работает:

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