Mysql “on子句”SQL查询中的未知列“O.order\U id”

Mysql “on子句”SQL查询中的未知列“O.order\U id”,mysql,sql,wordpress,woocommerce,orders,Mysql,Sql,Wordpress,Woocommerce,Orders,下面的查询返回以下错误消息“on子句”中的未知列“O.order\u id”。我猜这是一个优先的问题?但我没有足够的背景去弄清楚那可能在哪里 我最近刚刚添加了“where”子句,以便可以对产品类别进行筛选 SELECT MAX( CASE WHEN OIM.meta_key = 'enrolment_id' THEN( SELECT firstname FROM wp_sp_enrolment

下面的查询返回以下错误消息“on子句”中的未知列“O.order\u id”。我猜这是一个优先的问题?但我没有足够的背景去弄清楚那可能在哪里

我最近刚刚添加了“where”子句,以便可以对产品类别进行筛选

SELECT
    MAX(
        CASE WHEN OIM.meta_key = 'enrolment_id' THEN(
        SELECT
            firstname
        FROM
            wp_sp_enrolments E
        WHERE
            OIM.meta_value = E.id
    )
    END
) AS 'firstname',
MAX(
    CASE WHEN OIM.meta_key = 'enrolment_id' THEN(
    SELECT
        surname
    FROM
        wp_sp_enrolments E
    WHERE
        OIM.meta_value = E.id
)
END
) AS 'surname',
O.order_item_name AS 'school',
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',
MAX(
    CASE WHEN OIM.meta_key = 'enrolment_Id' THEN(
    SELECT
        UM.meta_value
    FROM
        wp_usermeta UM,
        wp_sp_enrolments E
    WHERE
        UM.meta_key = '_user_phone' AND UM.user_id = E.memberid AND E.id = OIM.meta_value
    LIMIT 1
)
END
) AS 'phone', MAX(
    CASE WHEN OIM.meta_key = 'enrolment_id' THEN(
    SELECT
        U.user_email
    FROM
        wp_users U,
        wp_sp_enrolments E
    WHERE
        U.id = E.memberid AND E.id = OIM.meta_value
    LIMIT 1
)
END
) AS 'email', P.post_status AS 'status'
FROM
    wp_woocommerce_order_items O,
    wp_terms T,
    wp_term_taxonomy TT,
    wp_term_relationships TR,
    wp_woocommerce_order_itemmeta OIM
INNER JOIN wp_posts P ON
    P.ID = O.order_id
WHERE
    T.name = 'workshops' AND T.term_id = TT.term_id AND TT.taxonomy = 'product_cat' AND TT.term_id = TR.term_taxonomy_id AND TR.object_id = OIM.meta_value AND OIM.meta_key = '_product_id' AND OIM.order_item_id = O.order_item_id
GROUP BY
    O.order_item_id

不确定,但请尝试执行以下内部联接:

SELECT
    MAX(
        CASE WHEN OIM.meta_key = 'enrolment_id' THEN(
        SELECT
            firstname
        FROM
            wp_sp_enrolments E
        WHERE
            OIM.meta_value = E.id
    )
    END
) AS 'firstname',
MAX(
    CASE WHEN OIM.meta_key = 'enrolment_id' THEN(
    SELECT
        surname
    FROM
        wp_sp_enrolments E
    WHERE
        OIM.meta_value = E.id
)
END
) AS 'surname',
O.order_item_name AS 'school',
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',
MAX(
    CASE WHEN OIM.meta_key = 'enrolment_Id' THEN(
    SELECT
        UM.meta_value
    FROM
        wp_usermeta UM,
        wp_sp_enrolments E
    WHERE
        UM.meta_key = '_user_phone' AND UM.user_id = E.memberid AND E.id = OIM.meta_value
    LIMIT 1
)
END
) AS 'phone', MAX(
    CASE WHEN OIM.meta_key = 'enrolment_id' THEN(
    SELECT
        U.user_email
    FROM
        wp_users U,
        wp_sp_enrolments E
    WHERE
        U.id = E.memberid AND E.id = OIM.meta_value
    LIMIT 1
)
END
) AS 'email', P.post_status AS 'status'
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_term_relationships TR ON
    O.order_id = OIM.meta_value
INNER JOIN wp_term_taxonomy TT ON
    TR.term_taxonomy_id = TT.term_taxonomy_id
INNER JOIN wp_terms T ON
    T.term_id = TT.term_id 
INNER JOIN wp_posts P ON
    P.ID = O.order_id
WHERE T.name = 'workshops' 
    AND TT.taxonomy = 'product_cat' 
    AND OIM.meta_key = '_product_id'
GROUP BY
    O.order_item_id

正如您所怀疑的,问题在于逗号运算符和联接运算符的优先级

上面写着:

但是,逗号运算符的优先级低于内部联接、交叉联接、左联接等。当存在连接条件时,若将逗号连接和其他连接类型混合使用,则可能会发生“on子句”中形式未知的列“col_name”的错误

意思是,你最好不要混在一起

因此,与其进行内部连接,不如

, wp_posts P
在哪里

或者,您可以将逗号分隔的表捆绑在括号中:

(wp_woocommerce_order_items O,
wp_terms T,
wp_term_taxonomy TT,
wp_term_relationships TR,
wp_woocommerce_order_itemmeta OIM  )
INNER JOIN ...

这是我为什么对逗号运算符如此反感的另一个例子。

您确定wp\u商业\u订单\u项目中有列订单id吗?嗨,是的,肯定有。我猜问题在于它是否存在于查询返回的内容中?我同意你的看法,但是…我的错,你说的优先权是对的。这很有效。不幸的是,除了“school”和“status”之外的每一列都返回NULL。有什么想法吗?我不喜欢你的最大使用量,但是,你的main WHERE包含一个OIM.meta_键,它不是'incluation_id',因此你的maxy中只有null。是的,它可能有点像是拼凑在一起的SQL查询!你能推荐一个替代方案吗?我没有正确的见解,tbh。我假设meta_键列上的where可能不好?我不知道。对你的用例了解不够,这就把问题扩大到很多tbh。
(wp_woocommerce_order_items O,
wp_terms T,
wp_term_taxonomy TT,
wp_term_relationships TR,
wp_woocommerce_order_itemmeta OIM  )
INNER JOIN ...