SQL LEFT JOIN子查询别名

Cha*_*XIV 72 sql subquery left-join

我正在运行这个SQL查询:

SELECT wp_woocommerce_order_items.order_id As No_Commande
FROM  wp_woocommerce_order_items
LEFT JOIN 
    (
        SELECT meta_value As Prenom
        FROM wp_postmeta
        WHERE meta_key = '_shipping_first_name'
    ) AS a
ON wp_woocommerce_order_items.order_id = a.post_id
WHERE  wp_woocommerce_order_items.order_id =2198
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

#1054 - 'on子句'中的未知列'a.post_id'.

我认为我的代码很简单,但我做不到.我究竟做错了什么?

Mah*_*mal 118

您没有post_id在子查询中选择.您必须在子查询中选择它,如下所示:

SELECT wp_woocommerce_order_items.order_id As No_Commande
FROM  wp_woocommerce_order_items
LEFT JOIN 
    (
        SELECT meta_value As Prenom, post_id  -- <----- this
        FROM wp_postmeta
        WHERE meta_key = '_shipping_first_name'
    ) AS a
ON wp_woocommerce_order_items.order_id = a.post_id
WHERE  wp_woocommerce_order_items.order_id =2198 
Run Code Online (Sandbox Code Playgroud)


EJa*_*Jay 19

我认识到答案有效并且已经被接受,但是有一种更清晰的方式来编写该查询.测试了mysql和postgres.

SELECT wpoi.order_id As No_Commande
FROM  wp_woocommerce_order_items AS wpoi
LEFT JOIN wp_postmeta AS wpp ON wpoi.order_id = wpp.post_id 
                            AND wpp.meta_key = '_shipping_first_name'
WHERE  wpoi.order_id =2198 
Run Code Online (Sandbox Code Playgroud)

  • SQLFiddle 结果示例:`Criteria on Join` http://sqlfiddle.com/#!2/e84fa/5 和 `Subquery on Join` http://sqlfiddle.com/#!2/e84fa/3 请注意` Join` 的子查询从 wp_postmeta 检索了 22 行,而 `Criteria on Join` 仅从 wp_postmeta 检索了 1 行。 (2认同)