Как выбрать значения строки условно и изменить их на настраиваемые столбцы? - PullRequest
0 голосов
/ 20 июня 2020

У меня есть две таблицы orders, product_meta, которые выглядят следующим образом:

заказы:

order_id product_id
   1        45
   1        46
   2        46  

product_meta:

product_id meta_key meta_value
    45       price    1199
    45       name     GPU-1
    46       price    1299
    46       name     GPU-2

Мне нужна такая таблица:

order_id product_id product_name product_price
     1        45       GPU-1         1199
     1        46       GPU-2         1299
     2        46       GPU-2         1299

Запрос, который я пробовал:

select
    o.order_id,
    o.product_id,
    pm.meta_value as 'product_name'
from  orders o
join product_meta pm on pm.product_id = o.product_id AND pm.meta_key = 'name'

, но это работает только для одного поля (name), как мне изменить это, чтобы включить цену и другие мета-значения?

1 Ответ

1 голос
/ 20 июня 2020

Один метод - это два соединения:

select o.*, pmn.meta_value as product_name, pmp.meta_value as product_price
from orders o left join
     product_meta pmn
     on pmn.product_id = o.product_id and pmn.meta_key = 'name' left join
     product_meta pmp
     on pmp.product_id = o.product_id and pmp.meta_key = 'price';

Здесь используются left join s, поэтому будут включены все заказы, даже если в метаданных отсутствует имя или цена, или и то, и другое.

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