Псевдоним подзапроса SQL 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

и я получаю эту ошибку:

#1054-неизвестный столбец 'a. post_id'в предложении on.

Я думаю, что мой код довольно прост, но я не могу сделать это правильно. Что я делаю не так?

2 53

2 ответа:

вы не Выберите 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 

Я признаю, что ответ работает и был принят, но есть гораздо более чистый способ написать этот запрос. Протестировано на 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