Объединить строку из столбцов другой таблицы с несколькими строками - PullRequest
1 голос
/ 15 марта 2020

Я разработал приложение, связанное с WooCommerce. Поэтому я должен использовать таблицы базы данных WooCommerce.

Я застрял в какой-то момент. Я хотел бы объединить таблицу с другой строкой с несколькими строками, которая имеет foreign_id.

Например:

В WooCommerce есть 2 таблицы. Это wp_posts и wp_postmeta.

* wp_posts содержит следующую таблицу.

| ID   | post_title | post_name
| 1682 | foo        | foo
| 1681 | bar        | bar

wp_postmeta содержит следующую таблицу.

| post_id | meta_key              | meta_value
| 1682    | _regular_price        | 100
| 1682    | _sale_price           | 99
| 1681    | _regular_price        | 300
| 1681    | _sale_price           | 299

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

| ID   | post_title | post_name  | _regular_price | _sale_price |
| 1682 | foo        | foo        | 100            | 99
| 1681 | bar        | bar        | 300            | 299

Большое вам спасибо.

All The Best,

1 Ответ

2 голосов
/ 15 марта 2020

Использовать условную агрегацию:

select
    p.id,
    p.post_title,
    p.post_name,
    max(case when m.meta_key = '_regular_price' then m.meta_value end) regular_price,
    max(case when m.meta_key = '_sale_price'    then m.meta_value end) sale_price
from wp_posts p
inner join wp_postmeta m on m.post_id = p.id
group by p.id, p.post_title, p.post_name

Если в мета-таблице содержится большое количество строк на пост, можно оптимизировать запрос с помощью следующего предложения where:

where m.meta_key in ('_regular_price', '_sale_price')
...