2017-05-15 100 views
0

所以說我有一個表orders與列zip_code和表provinces表。 provinces的字段爲name,starting_zipending_zip(表示開始和結束zip之間的所有郵政編碼均與本省有關)。從子查詢中選擇列

我需要選擇成千上萬的訂單,幷包含它們要運送到的省份的名稱。我已經試過這樣的事情:

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... 

我也試過:

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... 

另外:

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... 

無論我做什麼,雖然,我得到這樣一個錯誤:

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

這是有道理的,子選擇wouldn沒有範圍可以從主選擇中獲取信息,但是有什麼想法可以讓這個工作起作用?

+0

注意,限制無秩序BY是相當無意義的。 – Strawberry

+1

請參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查詢 – Strawberry

+0

謝謝,@renis。在我的問題中只是一個錯字,但我的問題實際上是我真正的查詢中的一個不同的錯字。 – Chris

回答

0

爲什麼你不這樣做?

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... 

我真的不明白爲什麼這應該在FROM聲明。你是選擇反正只是名字列

更新

你看到了我在子查詢更改了表的名字嗎?該FROM聲明看起來是這樣的:

FROM orders 

但是,WHERE條款是這樣的:

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

我在查詢改成了這樣:

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

啊,忘記提及我也嘗試過......與其他人一樣的問題 – Chris

+0

@Chris:更新了答案 – Arion

+0

謝謝。這實際上只是我的問題中的一個錯字,但我想到了(由於我的實際代碼中有一個不同的錯字,呵呵)。我喜歡你的回答,所以我會接受它 – Chris