SQL Лучший способ вернуть данные из одной таблицы вместе с сопоставленными данными из другой таблицы - PullRequest
0 голосов
/ 12 января 2019

У меня следующая проблема.

У меня есть таблица Entries, которая содержит 2 столбца:

  • EntryID - уникальный идентификатор
  • Name - какое-то имя

У меня есть еще одна EntriesMapping таблица ( таблица сопоставления «многие ко многим» ), которая содержит 2 столбца:

  • EntryID, что относится к EntryID таблицы Entries
  • PartID, что относится к PartID в отдельной таблице Parts.

Мне нужно написать SP , который будет возвращать все данные из Entries таблицы, но для каждой строки в таблице Entries я хочу предоставить список всех PartID, зарегистрированных в таблице EntriesMapping.

Мой вопрос заключается в том, как мне лучше всего подойти к разработке решения, учитывая, что результаты SP будут регулярно обрабатываться приложением, поэтому производительность очень важна.

1. Должен ли я написать SP, который выберет несколько строк на запись - где, если для данной записи зарегистрировано более одного PartID - я верну несколько строк, каждая из которых имеет одинаковый EntryID и Name но отличается PartID

OR

2. Должен ли я написать SP, который выберет 1 строку для каждой записи в таблице Entries и будет иметь поле, которое является string / xml / json , которое содержит все различные PartID s.

OR

3. Есть какое-то другое решение, о котором я не думаю?

Решение 1 мне кажется, лучший путь, но я буду передавать много повторяющихся данных.

Решение 2 не будет передавать лишние данные, но string / json / xml потребуется дополнительно обработать, перенеся на большее время процессора на элемент.

PS: я чувствую, что это довольно распространенная проблема, но мне не удалось найти какой-либо ресурс, который мог бы предоставить общие решения или некоторые плюсы / минусы для различных подходов.

1 Ответ

0 голосов
/ 12 января 2019

Я думаю, вам нужно просто JOIN:

SELECT e.EntryId, e.Name, em.PartId
FROM Entries e
JOIN EntriesMapping em ON e.EntryId = em.EntryId

Это вернет то, что вы хотите, нет необходимости в хранимой процедуре для этого.

...