126 votes

SQL LEFT JOIN Alias de sous-requête

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 la clause 'on'.

Je pense que mon code est assez simple, mais je n'arrive pas à le rendre correct. Qu'est-ce que je fais de mal ?

207voto

Mahmoud Gamal Points 46598

Vous n'avez pas choisi 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

25voto

EJay Points 1031

Je reconnais que la réponse fonctionne et a été acceptée, mais il y a une façon beaucoup plus propre d'écrire cette requête. 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X