Estoy ejecutando esta consulta 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
Y me sale este error:
# 1054 - Columna desconocida 'a.post_id' en 'cláusula on'.
Creo que mi código es bastante simple, pero no puedo corregirlo. ¿Qué estoy haciendo mal?
Reconozco que la respuesta funciona y ha sido aceptada, pero hay una forma mucho más limpia de escribir esa consulta. Probado en mysql y 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
fuente
EXPLAIN SELECT ...
o para MSSQLSET SHOWPLAN_ALL ON
oSET SHOWPLAN_XML ON
para ver cómo se recuperan las filas. En MySQLused filesort
,used temporary
son lentos y deben evitarse. En cuanto a la subconsulta unida, requiere recuperar todas las filas que coincidan con el valor de meta_key de la tabla wp_postmeta antes de unirse a los ID de publicación / pedido. Por lo tanto, debería ser seguro asumir que sería más rápido hacer coincidir los ID de pedido / publicación y meta_key. Generalmente, una subconsulta como la que usó es mejor con unaORDER BY
LIMIT
que no se puede filtrar de la consulta principal.Criteria on Join
sqlfiddle.com/#!2/e84fa/5 ySubquery on Join
sqlfiddle.com/#!2/e84fa/3 Tenga en cuenta que lasSubquery on Join
22 filas recuperadas de wp_postmeta, mientras que laCriteria on Join
única recuperada 1 de wp_postmeta.