Ich führe diese SQL-Abfrage aus:
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
Und ich bekomme diesen Fehler:
# 1054 - Unbekannte Spalte 'a.post_id' in 'on-Klausel'.
Ich denke, mein Code ist ziemlich einfach, aber ich kann es nicht richtig machen. Was mache ich falsch?
Ich erkenne, dass die Antwort funktioniert und akzeptiert wurde, aber es gibt eine viel sauberere Möglichkeit, diese Abfrage zu schreiben. Getestet auf MySQL und Postgres.
quelle
EXPLAIN SELECT ...
oder für MSSQL verwendenSET SHOWPLAN_ALL ON
oderSET SHOWPLAN_XML ON
sehen, wie Zeilen abgerufen werden. In MySQLused filesort
,used temporary
sind langsam und sollten vermieden werden. Für die verknüpfte Unterabfrage müssen alle Zeilen, die mit dem Wert meta_key übereinstimmen, aus der Tabelle wp_postmeta abgerufen werden, bevor die IDs für Post / Order verknüpft werden. Es sollte also sicher sein, dass es schneller ist, die Bestell- / Post-IDs und den Meta-Schlüssel abzugleichen. Im Allgemeinen eignet sich eine Unterabfrage wie die von Ihnen verwendete am besten für eineORDER BY
LIMIT
, die nicht aus der Hauptabfrage herausgefiltert werden kann.Criteria on Join
sqlfiddle.com/#!2/e84fa/5 undSubquery on Join
sqlfiddle.com/#!2/e84fa/3 Beachten Sie, dassSubquery on Join
22 Zeilen aus wp_postmetaCriteria on Join
abgerufen wurden, während nur 1 aus wp_postmeta abgerufen wurde.