SQLite превращает определенные столбцы строк в дополнительные столбцы и выполняет внутреннее объединение для каждого из этих столбцов. - PullRequest
0 голосов
/ 07 мая 2018

Извините за странное название, но я не знаю, как его лучше сформулировать.

У меня есть таблица Attributes:

id|Name
-------
1 |att1
2 |att2
3 |...

стол Product:

id|Name
-------
1 |Pro1
2 |Pro2
3 |Pro4

и таблица ProductAttribute:

id|productId|attributeId|value
------------------------------
1 |1        |1          |val11
2 |2        |1          |val21
3 |2        |2          |val22
4 |...

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

Я знаю, что могу "сделать" это с помощью join, но есть много атрибутов, и просто невозможно сделать что-то подобное вручную, поэтому я хочу сделать это динамически, но вместо этого на языке SQL некоторого внешнего языка.

Вот пример результирующего представления / запроса:

id|Product name|att1 |att2 |...
-------------------------------
1 |Pro1        |val11|Null |...
2 |Pro2        |val21|val22|...
3 |...

1 Ответ

0 голосов
/ 07 мая 2018

Вы просто ищете сводный запрос:

SELECT
    p.Name,
    MAX(CASE WHEN a.Name = 'att1' THEN pa.value END) AS att1,
    MAX(CASE WHEN a.Name = 'att2' THEN pa.value END) AS att2
FROM Product p
LEFT JOIN ProductAttribute pa
    ON p.id = pa.productId
LEFT JOIN Attributes a
    ON pa.attributeId = a.id
GROUP BY
    p.id, p.Name;
...