Присоединение таблицы ключ-значение к основной таблице - PullRequest
0 голосов
/ 01 октября 2018

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

  1. сборы (1 строка для каждой транзакции)
  2. charge_metadata (1 строка для каждой пары ключ-значение + 1 столбец в каждой строке для charge_id)

Мой текущий код дает мне новую строку для каждого ключа в charge_metadata

SELECT m.id, m.amount, s.key, s.value
FROM charges AS m
INNER JOIN charges_metadata AS s ON m.id = s.charge_id
WHERE key IN ('Product', 'Plan Type', 'Payment Plan')

То, что я хотел бы видеть:

+----------------+--------+---------+-----------+--------------+
|       id       | amount | Product | Plan Type | Payment Plan |
+----------------+--------+---------+-----------+--------------+
| 908asd7f098sa7 |    150 | T-shirt | Main      | Monthly      |
| 80as9d8f0as9d8 |    200 | Jeans   | Regular   | Yearly       |
+----------------+--------+---------+-----------+--------------+

1 Ответ

0 голосов
/ 01 октября 2018

Вам нужно повернуть значения с помощью ключа, который требует агрегирования:

SELECT
    m.id,
    m.amount,
    MAX(CASE WHEN s.`key` = 'Product'      THEN s.value END) AS Product,
    MAX(CASE WHEN s.`key` = 'Plan Type'    THEN s.value END) AS PlanType,
    MAX(CASE WHEN s.`key` = 'Payment Plan' THEN s.value END) AS PaymentPlan
FROM charges m
INNER JOIN charges_metadata s
WHERE `key` IN ('Product', 'Plan Type', 'Payment Plan')
GROUP BY
    m.id,
    m.amount,
    s.charge_id;
...