【问题标题】:Meta key:value fields returning NULL元键:返回 NULL 的值字段
【发布时间】:2019-03-30 18:07:56
【问题描述】:

我有一个围绕数据库中 meta_key 和 meta_value 字段的查询。它几乎就在那里,但是当我添加 INNER JOIN wp_enrolments 时,'class' 和 'fee-types' 现在返回 NULL。这就像它与 INNER JOIN wp_woocommerce_order_itemmeta 行冲突。

wp_woocommerce_order_itemmeta 的结构是

  • 身份证
  • 元密钥
  • 元值

wp_enrolments 表的结构是:

  • 身份证
  • 名字

如果您能看看我的语法并发现任何错误,我将不胜感激。

SELECT 
  O.order_item_id, O.order_item_name,
  E.firstname,
  MAX(CASE WHEN OIM.meta_key = 'class' THEN OIM.meta_value END) AS 'class',
  MAX(CASE WHEN OIM.meta_key = 'fee-type' THEN OIM.meta_value END) AS 'fees'
FROM wp_woocommerce_order_items O
INNER JOIN wp_woocommerce_order_itemmeta OIM ON O.order_item_id = OIM.order_item_id
INNER JOIN wp_enrolments E ON E.id = OIM.meta_value AND OIM.meta_key = 'enrolment_id'
GROUP BY O.order_item_id

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    也许您需要LEFT JOIN。另外,修复GROUP BY 以匹配SELECT,并且不要对列别名使用单引号:

    SELECT O.order_item_id, O.order_item_name, E.firstname,
           MAX(CASE WHEN OIM.meta_key = 'class' THEN OIM.meta_value END) AS class,
           MAX(CASE WHEN OIM.meta_key = 'fee-type' THEN OIM.meta_value END) AS fees
    FROM wp_woocommerce_order_items O JOIN
         wp_woocommerce_order_itemmeta OIM
         ON O.order_item_id = OIM.order_item_id LEFT JOIN
         wp_enrolments E
         ON E.id = OIM.meta_value AND
            OIM.meta_key = 'enrolment_id'
    GROUP BY O.order_item_id, O.order_item_name, E.firstname;
    

    【讨论】:

    • 所以该查询的输出是两行,它们应该是同一行的一部分,即第一行'firstname'为NULL,第二行'class'和'fee-type'是空:)
    • 我怀疑从GROUP BYSELECT 中删除O.order_item_idO.order_item_name 将解决您的问题。但是,您的问题没有足够的信息让我知道是否真的如此。
    猜你喜欢
    • 2021-04-14
    • 1970-01-01
    • 2016-05-06
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    相关资源
    最近更新 更多