Я выполняю этот 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
И я получаю такую ошибку:
# 1054 - Неизвестный столбец 'a.post_id' в 'on clause'.
Я думаю, что мой код довольно прост, но я не могу его исправить. Что я делаю не так?
Я понимаю, что ответ работает и был принят, но есть более простой способ написать этот запрос. Проверено на mysql и 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
источник
EXPLAIN SELECT ...
или для MSSQLSET SHOWPLAN_ALL ON
илиSET SHOWPLAN_XML ON
посмотреть, как извлекаются строки. В MySQLused filesort
,used temporary
медленно и следует избегать. Что касается объединенного подзапроса, он требует извлечения всех строк, соответствующих значению meta_key, из таблицы wp_postmeta перед присоединением по идентификаторам публикации / заказа. Таким образом, можно с уверенностью предположить, что будет быстрее соответствовать идентификатору заказа / публикации и meta_key. Как правило, лучше всего использовать подзапрос, подобный тому, который вы использовали, с тем,ORDER BY
LIMIT
что его нельзя отфильтровать из основного запроса.Criteria on Join
sqlfiddle.com/#!2/e84fa/5 иSubquery on Join
sqlfiddle.com/#!2/e84fa/3 Обратите внимание, чтоSubquery on Join
из wp_postmeta было получено 22 строки, а из wp_postmeta была полученаCriteria on Join
только одна.