web-dev-qa-db-fra.com

Alias ​​de sous-requête SQL LEFT JOIN

J'exécute cette requête 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

Et je reçois cette erreur:

# 1054 - Colonne inconnue 'a.post_id' dans 'on clause'.

Je pense que mon code est assez simple, mais je ne peux pas le corriger. Qu'est-ce que je fais mal?

68
CharleyXIV

Vous n'avez pas sélectionné post_id dans la sous-requête. Vous devez le sélectionner dans la sous-requête comme ceci:

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 
111
Mahmoud Gamal

Je reconnais que la réponse fonctionne et a été acceptée, mais il existe un moyen beaucoup plus simple d’écrire cette question. Testé sur mysql et 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 
17
EJay