【发布时间】:2019-02-25 10:09:04
【问题描述】:
我需要创建 SQL 来检索所有自定义帖子类型“项目”及其所有值。 这是表结构
POSTS 表
|| *id*|| *post_title* || *post_name* || *post_type*
|| 550 || Brand Test 04 || brand-test-04 || brands
|| 579 || 200 ml / 6.8 oz || 200-ml-6-8-oz || sizes
|| 758 || Item recor 8doem recordado 88 || item-recordado-88 || item
POSTMETA 表:
|| *post_id* || *meta_key* || *meta_value*
|| 758 || basicName || Item recor 8doem recordado 88
|| 758 || basicBrandName || 550
|| 758 || basicSize || 579
我目前的查询是: 在这个查询中,我在表之间进行了连接,以从表 POSTS 中检索 post(post_type 'item') 并将其与 POSTMETA 上的相关值相关联。 我将 POSTMETA 的值从 meta_key/meta_value 列拆分为每个项目的一列。
SELECT
p.ID,
p.post_title,
p.post_name,
MAX(case when pm.meta_key = 'basicBrandName' then pm.meta_value end) as idBrand,
MAX(case when pm.meta_key = 'basicSize' then pm.meta_value end) as idSize
from xyz_posts p
inner join xyz_postmeta pm
on p.ID = pm.post_id
where
p.post_type = 'item' and
p.post_status = 'publish'
group by p.ID
查询返回这个结构:
|| *ID*|| *post_title* || *post_name* || *idBrand*|| *idSize*
|| 758 || Item recordado 88 Item || item-recordado-88 || 550 || 579
我需要调整查询以返回此结构:
|| *id* || *post_title* || *post_name* || *brand_title* || *brand_name* || *size_title* || *size_name*
|| 758 || Item recordado 88 Item || item-recordado-88 || Brand Test 04 || brand-test-04 || 200 ml / 6.8 oz || 200-ml-6-8-oz
我尝试了内连接、左连接等,但没有成功。
如果有人可以提供帮助,我将不胜感激。
【问题讨论】:
-
您当前的查询在我看来完全正确。仅添加新的最大
CASE表达式以覆盖您希望出现在输出中的新列有什么问题? -
@TimBiegeleisen 如果我只输入一个新的最大 case 表达式,它将返回 null。因为我需要在两个表之间进行其他联接(我尝试过但没有成功)。
-
从您的数据中不清楚您要在这里做什么。考虑将您的示例数据简化为一两个帖子,并显示准确的输入和输出。如果此处涉及另一个表/连接,则也显示。
-
@TimBiegeleisen,你能再看看这些问题吗?不,我认为它更清楚。谢谢