2015-04-06 162 views
0

我試圖根據目標(DEST)選擇成本。如果國家的成本不存在,那麼我必須尋找大陸,如果大陸的成本不存在,那麼我選擇基於他人(目的地)。錯誤代碼:1242子查詢返回多於1行mysql

SELECT SUM(CD.COST+CW.COST) AS TOTAL_COST 
FROM SHIP_COST_BY_DEST CD 
INNER JOIN SHIP_COST_BY_WEIGHT CW 
ON CD.PROD_CODE = CW.PROD_CODE 
WHERE IF((SELECT UPPER(CD.DEST) FROM SHIP_COST_BY_DEST), 
(UPPER(CD.DEST) = UPPER('Others')), 
(IF((SELECT UPPER(CD.DEST) FROM SHIP_COST_BY_DEST 
WHERE UPPER(CD.DEST)=UPPER('India')), 
UPPER(CD.DEST) = UPPER('India'),'Asia'))) 

可以在任何一個可以幫助我

回答

0

這是一個非常複雜的WHERE子句 - 這將是保持一個噩夢。但問題是你的一個子查詢(圓括號內的選擇)正在返回多個值,而邏輯不允許這樣做。對於你來說最簡單的事情(因爲我沒有你的數據)就是分別運行這些子查詢中的每一個,看看哪個返回了多個值,並查看它在邏輯上是否有意義。

例如,你不能說

Name = (SELECT Name FROM AllCustomers) 

,因爲該名稱不能等於把所有那些名字一次。但是,您可以說,

Name IN (SELECT Name FROM AllCustomers) 

因爲這給你一個可能性列表中的IN。此外,您需要確保不僅所有子查詢都只在適當的時候返回一個答案NOW,而且他們只能返回一個答案,否則當數據與所需的數據不同時,您最終會遇到生產中的問題你測試過。

+0

非常感謝,我知道了 – Naveen 2015-04-06 16:36:10

+0

@Naveen很高興我能幫到你!請將此答案標記爲正確答案,以便其他StackOverflow人員不會試圖回答它 - 謝謝! – CindyH 2015-04-06 17:06:31

相關問題