Uruchamiam to zapytanie 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
I otrzymuję ten błąd:
# 1054 - Nieznana kolumna „a.post_id” w „klauzuli on”.
Myślę, że mój kod jest dość prosty, ale nie mogę tego naprawić. Co ja robię źle?
Rozumiem, że odpowiedź działa i została zaakceptowana, ale istnieje znacznie bardziej przejrzysty sposób napisania tego zapytania. Testowane na mysql i 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
źródło
EXPLAIN SELECT ...
lub dla MSSQLSET SHOWPLAN_ALL ON
lubSET SHOWPLAN_XML ON
zobaczyć, jak pobierane są wiersze. W MySQLused filesort
,used temporary
są powolne i należy ich unikać. Jeśli chodzi o połączone podzapytanie, wymaga pobrania wszystkich wierszy pasujących do wartości meta_key z tabeli wp_postmeta przed dołączeniem do identyfikatorów postu / zamówienia. Dlatego należy bezpiecznie założyć, że szybciej byłoby dopasować identyfikator zamówienia / posta i meta_key. Generalnie podzapytanie, takie jak użyte, jest najlepsze zORDER BY
LIMIT
zapytaniem, którego nie można odfiltrować z zapytania głównego.Criteria on Join
sqlfiddle.com/#!2/e84fa/5 iSubquery on Join
sqlfiddle.com/#!2/e84fa/3 Zauważ, żeSubquery on Join
pobrano 22 wiersze z wp_postmeta, podczas gdyCriteria on Join
jedyny pobrano 1 z wp_postmeta.