错误代码:1242子查询返回超过1行的mysql

时间:2015-04-06 03:59:17

标签: mysql

我正在尝试根据目的地(DEST)选择费用。如果国家不存在成本,那么我必须找到大陆,如果大陆也不存在成本,那么我根据其他人(目的地)选择。

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')))

任何人都可以帮助我

1 个答案:

答案 0 :(得分:0)

这是一个非常复杂的WHERE子句 - 维持这将是一场噩梦。但问题是你的一个子查询(括号内的选择)返回多个值,逻辑不允许这样做。你最容易做的事情(因为我没有你的数据)是分别运行每个子查询,看看哪个返回多个值,看看它在那个地方是否合乎逻辑。

例如,你不能说

Name = (SELECT Name FROM AllCustomers)

因为名称不能同时将所有这些名称等同。但是,您可以说

Name IN (SELECT Name FROM AllCustomers)

因为它为您提供了一个可能的IN列表。此外,您需要确保所有子查询不仅仅在适当时返回一个答案,而且它们只能返回一个答案,或者当数据不同于数据时,您最终会遇到生产问题你用。测试过。