SQL запрос значения ключа - PullRequest
0 голосов
/ 21 апреля 2020

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

Таблица продуктов

  • ID (PK), Описание, CategoryID, SegmentID, TypeID, SubTypeID и т. Д. c.

Таблица атрибутов

  • ID (PK), ProductID (FK), Ключ, Значение

И я хотел бы запросить эти две таблицы в объединении, которое возвращает 1 строку для каждого продукта со всеми записями пары ключ / значение в таблице атрибутов, возвращенными в одном столбце, возможно, разделенными символом канала (Key1: Value1 | Key2: Value2 | Key3: Value3 | etc.). У каждого продукта может быть разное количество пар ключ / значение, причем у некоторых продуктов их всего 2-3, а у некоторых - 30. Я хотел бы выяснить, как сделать так, чтобы результаты запроса выглядели примерно так (возможно, выбран в новую таблицу):

product.ID, product.Description, [столбец специальных атрибутов], product.CategoryID, product.SegmentID, et c.

пример результата:

65839, "WonderWidget", "HeightInInches: 26 | WeightInLbs: 5 | Color: Black", "Widgets", "Commerical"  

И наоборот, было бы полезно выяснить, как получить результаты запроса, отформатированные, как указано выше, и вернуть их * * * * обратно в исходную таблицу атрибутов. Например, если мы выведем приведенный выше запрос в таблицу, в которой [столбец специальных атрибутов] был изменен (значения обновлены / исправлены человеком), было бы неплохо узнать, как использовать таблицу, содержащую [столбец специальных атрибутов] для обновить исходную таблицу атрибутов. Я думаю, чтобы это было возможно, поле Attribute.ID должно быть включено в вывод запроса.

В конце я пытаюсь сделать так, чтобы sh был способ экспортировать Product и Attribute. данные выходят в 1 строку для каждого продукта со всеми данными атрибутов, так что человек может просмотреть / обновить / исправить их в таком простом виде, как файл Excel, а затем отправить обратно в SQL. Я думаю, что смогу понять, как все это сделать, когда преодолею препятствия на пути выяснения того, как вывести продукты и атрибуты в виде одной строки для каждого продукта. Возможно, правильный ответ состоит в том, чтобы объединить все атрибуты в столбцы, но я боюсь, что запрос будет невероятно широким и расточительным. Также открыты для предложений. Переключение на базу данных типа документа сейчас не вариант; нужно выяснить лучший способ справиться с этим в реляционной SQL.

1 Ответ

0 голосов
/ 21 апреля 2020

Сначала необходимо сгруппировать пары ключ-значение. Это может быть достигнуто с помощью оператора concat, такого как ||, вам также нужно думать о пустых значениях. NUll, сцепленный с NULL, по-прежнему равен NULL в большинстве БД.

SELECT ProductID, Key || ':' || Value as KeyValue FROM AttributeTable

Тогда вам нужно будет сгруппировать их, используя функцию агрегирования, такую ​​как STRING_AGG (при условии, что SQL Server выше 2017). Другие базы данных имеют различные агрегатные функции Mysql f ex использует GROUP_CONCAT

https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017 https://www.geeksforgeeks.org/mysql-group_concat-function/

SELECT ProductID, STRING_AGG( Key || ':' || Value, '|') as Key Value FROM AttributeTable GROUP BY ProductId

Я могу расширить на ответ, если вы можете предоставить больше информации.

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