2017-05-15 5 views
0

Also sagen, ich habe eine Tabelle namens orders mit einer Spalte zip_code und eine Tabelle mit dem Namen provinces. provinces hat die Felder name, starting_zip und ending_zip (um anzuzeigen, dass alle Postleitzahlen zwischen Start- und End-Zip für diese Provinz gelten).Auswählen aus einer Unterabfrage in eine Spalte

Ich muss Tausende Bestellungen auswählen und den Namen der Provinz angeben, an die sie versendet werden sollen. Ich habe so etwas wie dies versucht:

SELECT orders.*, p.name 
FROM orders, (SELECT name FROM provinces 
    WHERE order.zip_code >= provinces.starting_zip 
    AND order.zip_code <= provinces.ending_zip LIMIT 1) p 
WHERE... 

ich auch versucht:

SELECT orders.*, p.name 
FROM orders 
JOIN (SELECT name FROM provinces 
    WHERE order.zip_code >= provinces.starting_zip 
    AND order.zip_code <= provinces.ending_zip LIMIT 1) p 
WHERE... 

auch:

SELECT orders.*, (SELECT name FROM provinces 
    WHERE order.zip_code >= provinces.starting_zip 
    AND order.zip_code <= provinces.ending_zip LIMIT 1) as name 
FROM orders 
WHERE... 

Egal, was ich aber tun, ich einen Fehler wie:

"Unknown column 'order.zip_code' in 'where clause' 

Es macht Sinn, dass die Subselect würde nicht Habe keinen Zugriff auf Informationen von der Hauptauswahl, aber eine Idee, wie ich das zum Funktionieren bringen könnte?

+0

Beachten Sie, dass ohne ORDER LIMIT BY ist ziemlich bedeutungslos. – Strawberry

+1

Siehe http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple-sql- Abfrage – Strawberry

+0

danke, @renis. nur ein Tippfehler in meiner Frage, aber mein Problem war tatsächlich ein anderer Tippfehler in meiner echten Frage. – Chris

Antwort

0

Warum machst du es nicht so?

SELECT orders.*, 
(
    SELECT name 
    FROM provinces 
    WHERE orders.zip_code >= provinces.starting_zip 
    AND orders.zip_code <= provinces.ending_zip 
    LIMIT 1 
) as name 
FROM orders 
WHERE... 

Ich weiß nicht wirklich sehen, warum dies in der FROM Aussage sein sollte. Sie sind der Auswahl sowieso nur der Name Spalte

aktualisieren

Haben Sie gesehen, dass ich den Tabellen-Namen in der Unterabfrage geändert? Die FROM Anweisung sieht wie folgt aus:

FROM orders 

Aber die WHERE Klausel sieht wie folgt aus:

WHERE order.zip_code >= provinces.starting_zip 
AND order.zip_code <= provinces.ending_zip 

Ich habe es in der Abfrage dies geändert:

WHERE orders.zip_code >= provinces.starting_zip 
AND orders.zip_code <= provinces.ending_zip 
+0

Ah, vergaß zu erwähnen, dass ich das auch versuchte ... das gleiche Problem wie die anderen – Chris

+0

@Chris: Die Antwort aktualisiert – Arion

+0

Danke. Das war eigentlich nur ein Tippfehler in meiner Frage, aber ich habe es herausgefunden (wegen eines anderen Tippfehlers in meinem tatsächlichen Code, heh). Ich mag deine Antwort, damit ich es akzeptiere – Chris

Verwandte Themen