2015-04-06 109 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

相关问题