将键值表连接到主表

时间:2018-10-01 09:03:36

标签: mysql stripe-payments

我有两个表:

  1. 收费(每笔交易1行)
  2. charges_metadata(每个键值对1行,charge_id每行1列)

我当前的代码给了charges_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 :(得分:1)

您需要使用键来汇总值,这需要进行汇总:

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;