Ich habe eine Abfrage, die mit einem mehrdeutigen Spaltenfehler fehlschlägt. Leider kann ich dieses Problem wegen des verwendeten Frameworks (Magento 1) nicht einfach lösen, indem ich den Spaltennamen mit dem korrekten Tabellennamen in der Where-Klausel voranstelle.MySQL mehrdeutige Spalte ohne Präfix Tabellenname aufzulösen und ohne Unterabfrage
die beiden Beispieltabellen Bei
T1 = colA | colB | colC
T2 = colD | colB | colE
Ich möchte eine Abfrage, die die Tabellen auf colA
und colD
, wählen Sie nur colC
und colE
, haben aber eine where-Klausel auf T1 colB
beitreten. Die gerade nach vorne SQL würde wie folgt aussehen:
SELECT colC, colE
FROM T1 LEFT JOIN T2 ON colA=colD
WHERE T1.colB=1
Das Problem ist, dass die ‚wo‘ Klausel bereits gesetzt ist von Kern-Code als WHERE colB=1
und ich kann es nicht leicht den T1
Präfix hinzufügen ändern.
Ich habe versucht, es als Unter Abfrage wie folgt umschreiben:
SELECT colC,colE
FROM T1 LEFT JOIN (SELECT colD,colE FROM T2) ON colA=colD
WHERE colB=1
Dies funktioniert und gibt mir, was ich erwarten würde, aber es ist nicht akzeptabel langsam.
Gibt es clevere SQL-Tricks, mit denen entweder die Unterabfrage optimiert oder der Join neu geschrieben werden kann, sodass ich die where-Klausel ohne das Tabellenpräfix verwenden kann.
Sie suchen noch weitere Einschränkungen B. kann der Code 'where colB = 1' irgendwo platziert werden oder muss er damit enden? Haben Sie eine 1: 1 Beziehung zwischen Ihren Tabellen oder können Sie mit 'colA = colD' mehrere Zeilen in T2 für eine Zeile bekommen in T1? Verwenden Sie zufällig mysql 5.7? – Solarflare
@ Solarflare Magento baut die letzte Abfrage von Objekten, sodass ich die Position der 'where'-Klausel nicht kontrollieren kann und am Ende der Abfrage erscheint. Für eine Verwendung gibt es eine Eins-zu-eins-Beziehung, aber in der zweiten Verwendung gibt es eine Eins-zu-Eins-Beziehung. Ich benutze MySQL Version 5.5 – Dom