Estou executando 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
E recebo este erro:
# 1054 - Coluna desconhecida 'a.post_id' na 'cláusula on'.
Acho que meu código é bem simples, mas não consigo corrigi-lo. O que estou fazendo errado?
Reconheço que a resposta funciona e foi aceita, mas há uma maneira muito mais limpa de escrever essa consulta. Testado em mysql e 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
fonte
EXPLAIN SELECT ...
ou para MSSQLSET SHOWPLAN_ALL ON
ouSET SHOWPLAN_XML ON
para ver como as linhas são recuperadas. No MySQLused filesort
,used temporary
são lentos e devem ser evitados. Quanto à subconsulta associada, ela requer a recuperação de todas as linhas que correspondem ao valor meta_key da tabela wp_postmeta antes de ingressar nos ids de pós-pedido. Portanto, deve ser seguro presumir que seria mais rápido corresponder no pedido / ID do post e meta_key. Geralmente, uma subconsulta como a que você usou é melhor com umaORDER BY
LIMIT
que não pode ser filtrada da consulta principal.Criteria on Join
sqlfiddle.com/#!2/e84fa/5 eSubquery on Join
sqlfiddle.com/#!2/e84fa/3 Observe que asSubquery on Join
22 linhas recuperadas de wp_postmeta enquanto aCriteria on Join
única recuperou 1 de wp_postmeta.