SQL查询woocommerce表指定meta_key不存在时返回NULL如何实现
现有WooCommerce相关数据表结构如下:
问题背景
需要查询指定meta_key对应的meta_value,如果对应meta_key不存在则返回NULL。原有查询语句如下:
SELECT `meta_value` FROM `wp_woocommerce_order_itemmeta` WHERE `order_item_id` = 66 AND `meta_key` IN ("pa_brewing-method", "pa_size", "Sold By")
原有语句仅返回存在的匹配行,无法补全不存在的键对应的NULL值,不符合输出要求。
解决方法
通过构造目标key的临时列表左关联原表即可实现需求,SQL如下:
SELECT m.meta_value FROM ( -- 按你期望的输出顺序排列要查询的meta_key SELECT 'pa_brewing-method' AS target_key UNION ALL SELECT 'pa_size' AS target_key UNION ALL SELECT 'Sold By' AS target_key ) AS target_keys LEFT JOIN `wp_woocommerce_order_itemmeta` m ON m.`meta_key` = target_keys.target_key AND m.`order_item_id` = 66;
逻辑说明
- 先用
UNION ALL生成你需要查询的所有meta_key临时列表,列表顺序和最终输出顺序完全一致 - 用
LEFT JOIN关联订单元数据表,关联条件同时指定order_item_id,保证只匹配对应订单的元数据 - 左关联特性会保留临时列表的全部行,没有匹配到元数据的行自动返回NULL,输出结果和预期格式完全匹配。
内容的提问来源于stack exchange,提问作者lenold vaz
相关产品推荐
相关产品推荐

