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'
Конечно, вместо звёзды надо выбрать только нужные поля.