如何在wp_postmeta表中获取barcode与_sku值相同的post_id?
解决wp_postmeta表中匹配barcode和_sku相同meta_value的post_id问题
原SQL语句报错的原因是WHERE子句中的meta_key = 'barcode' = '_sku'属于错误语法,MySQL会尝试将字符串'_sku'转换为数值类型,导致触发#1292 Truncated incorrect DECIMAL value错误。
以下是两种可行的实现方法:
方法一:自关联JOIN(推荐,性能更优)
通过将表自身关联,匹配同一个post_id下meta_key分别为'barcode'和'_sku'且meta_value相同的记录:
SELECT pm1.post_id FROM wp_postmeta pm1 JOIN wp_postmeta pm2 ON pm1.post_id = pm2.post_id WHERE pm1.meta_key = 'barcode' AND pm2.meta_key = '_sku' AND pm1.meta_value = pm2.meta_value -- 如需指定具体的meta_value(比如123),添加以下行 -- AND pm1.meta_value = '123'
方法二:分组聚合(写法简洁)
通过分组统计,筛选出同时包含'barcode'和'_sku'且meta_value一致的post_id:
SELECT post_id FROM wp_postmeta WHERE meta_key IN ('barcode', '_sku') GROUP BY post_id, meta_value HAVING COUNT(DISTINCT meta_key) = 2 -- 如需指定具体的meta_value(比如123),添加以下行 -- AND meta_value = '123'
性能说明
如果wp_postmeta表已创建post_id + meta_key的联合索引,自关联JOIN的查询效率通常更高,因为能快速定位到目标键值记录;分组聚合的写法更简洁,但在数据量较大时,JOIN的性能表现更稳定。
内容的提问来源于stack exchange,提问作者Jasinka
相关产品推荐
相关产品推荐

