SQL-запрос с отношением один-ко-многим с PostgreSQL - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь объединить список элементов корзины с запросом, который связан с таблицей line_items.Я абстрагировал простой пример моего варианта использования:

мой ожидаемый результат будет выглядеть следующим образом:

cart_id  cart_total shopper_id items                                                        payment_id
      1         345         34 [{"name":"egg","price:"39"}]                                 AS34gsdVSWET4
      2          54         45 [{"name":"biscut","price:"5"},{"name":"apple","price:"15"}]  JFHERHJE$Y#$H

с учетом схемы и данных, таких как:

тележки:

id  cart_total shopper_id
1   39         34
2   20         45

line_items:

id  cart_id    item_name item_price
1   1          egg       39
2   2          biscut     5
3   2          apple     15

оплата:

id  cart_id payment_id
1   1       AS34gsdVSWET4
2   2       JFHERHJE$Y#$H

Как получить весь список корзины и получить список тележек для конкретного shopperId?

Ответы [ 2 ]

0 голосов
/ 04 марта 2019
SELECT c.id AS cart_id,
       c.cart_total,
       c.shopper_id,
       json_agg(
          json_build_object(i.item_name, i.item_price::text)
       ) AS items,
       p.payment_id
FROM carts AS c
   JOIN line_items AS i ON i.cart_id = c.id
   JOIN payment AS p ON p.cart_id = c.id
GROUP BY c.id, c.cart_total, c.shopper_id, p.payment_id;
0 голосов
/ 04 марта 2019

Вот мое решение с использованием json_build_object:

SELECT c.id AS cart_id,
       c.cart_total,
       c.shopper_id,
       json_agg(
          json_build_object(
             'item_name', i.item_name,
             'item_price', i.item_price::text
          )
       ) AS items,
       p.payment_id
FROM carts AS c
   JOIN line_items AS i ON i.cart_id = c.id
   JOIN payment AS p ON p.cart_id = c.id
GROUP BY c.id, c.cart_total, c.shopper_id, p.payment_id;

Вы уверены, что хотите, чтобы цена была в виде строки?

...