SQL запрос, вывести данные из одной и той же таблицы, но с разными типами строк

Есть таблица в MySQL:

post_id|  meta_key        | meta_value
--------------------
63683 | _wp_attached_file | 82ed84efed3891009784847a9a1de95f.jpg
33590 | _thumbnail_id     | 63683
33590 | _sku              | VM047

63684 | _wp_attached_file | 420543735755fa8d9698f224983c1227.jpg
16927 | _thumbnail_id     | 63684 
16927 | _sku              | JD34HD

63685 | _wp_attached_file | a7d3a08965ed3d0bcceb5776027c5694.jpg
29143 | _thumbnail_id     | 63685
29143 | _sku              | DSB53DH

63686 | _wp_attached_file | f21af97efb9c4fb820c5ef7aa1de3842.jpg
33822 | _thumbnail_id     | 63686
33822 | _sku              | TYP5873BF

Необходимо получить таблицу такого вида

ID    |  AttachFile                          |ThumbId| SKU
--------------------
33590 | 82ed84efed3891009784847a9a1de95f.jpg | 63683 | VM047
16927 | 420543735755fa8d9698f224983c1227.jpg | 63684 | JD34HD
29143 | a7d3a08965ed3d0bcceb5776027c5694.jpg | 63685 | DSB53DH
33822 | f21af97efb9c4fb820c5ef7aa1de3842.jpg | 63686 | TYP5873BF

Пробовал выгрузить этим кодом:

select pm.post_id, pm1.meta_value _sku, pm2.meta_value _thumbnail_id, pm3.meta_value AttachFile
            from `wp_postmeta` pm
            left join `wp_postmeta` pm1 on pm1.meta_key='_sku' and pm.post_id=pm1.post_id
            left join `wp_postmeta` pm2 on pm2.meta_key='_thumbnail_id' and pm.post_id=pm2.post_id
            left join `wp_postmeta` pm3 on pm3.meta_key='_wp_attached_file' and pm.post_id=pm2.meta_value

Получился такой результат:

ID    |  AttachFile |ThumbId| SKU
--------------------
33590 |             | 63683 | VM047
33590 |             | 63683 | VM047
33590 |             | 63683 | VM047
16927 |             | 63684 | JD34HD
16927 |             | 63684 | JD34HD
16927 |             | 63684 | JD34HD
29143 |             | 63685 | DSB53DH
29143 |             | 63685 | DSB53DH
29143 |             | 63685 | DSB53DH
33822 |             | 63686 | TYP5873BF
33822 |             | 63686 | TYP5873BF
33822 |             | 63686 | TYP5873BF

Подскажите как поправить запрос, что бы притянуть колонку AttachFile и удалить дубликаты строк по post_id?


Ответы (2 шт):

Автор решения: Алексей Сердюк

Вопрос решил вот так.

select pm.post_id, pm1.meta_value _sku, pm2.meta_value _thumbnail_id, pm3.meta_value _wp_attached_file
  from `wp_postmeta` pm
  left join `wp_postmeta` pm1 on pm1.meta_key='_sku' and pm.post_id=pm1.post_id
  left join `wp_postmeta` pm2 on pm2.meta_key='_thumbnail_id' and pm.post_id=pm2.post_id
  left join `wp_postmeta` pm3 on pm3.meta_key='_wp_attached_file' and pm2.meta_value=pm3.post_id
GROUP BY pm.post_id
→ Ссылка
Автор решения: Akina
SELECT *
FROM wp_postmeta t1
JOIN wp_postmeta t2 ON t1.post_id = t2.meta_value
JOIN wp_postmeta t3 ON t2.post_id = t3.post_id
WHERE t1.meta_key = '_wp_attached_file'
  AND t2.meta_key = '_thumbnail_id'
  AND t3.meta_key = '_sku'

Конечно, вместо звёзды надо выбрать только нужные поля.

→ Ссылка