Saya menjalankan kueri SQL ini:
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
Dan saya mendapatkan kesalahan ini:
# 1054 - Kolom tidak diketahui 'a.post_id' di 'pada klausa'.
Saya pikir kode saya cukup sederhana, tetapi saya tidak bisa membuatnya benar. Apa yang saya lakukan salah?
Saya menyadari bahwa jawabannya berfungsi dan telah diterima, tetapi ada cara yang jauh lebih bersih untuk menulis kueri itu. Diuji di mysql dan 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
sumber
EXPLAIN SELECT ...
atau untuk MSSQLSET SHOWPLAN_ALL ON
atauSET SHOWPLAN_XML ON
untuk melihat bagaimana baris diambil. Di MySQLused filesort
,used temporary
lambat dan harus dihindari. Sedangkan untuk subkueri yang digabungkan, dibutuhkan pengambilan semua baris yang cocok dengan nilai meta_key dari tabel wp_postmeta sebelum bergabung pada id post / order. Jadi semestinya aman untuk berasumsi bahwa akan lebih cepat mencocokkan id order / post dan meta_key. Umumnya subkueri seperti yang Anda gunakan paling baik denganORDER BY
LIMIT
yang tidak dapat difilter dari kueri utama.Criteria on Join
sqlfiddle.com/#!2/e84fa/5 danSubquery on Join
sqlfiddle.com/#!2/e84fa/3 Perhatikan bahwaSubquery on Join
22 baris diambil dari wp_postmeta sedangkanCriteria on Join
hanya 1 yang diambil dari wp_postmeta.