【问题标题】:Error Code: 1242 Subquery returns more than 1 row mysql错误代码:1242 子查询返回多于 1 行 mysql
【发布时间】:2015-04-06 12:10:18
【问题描述】:

我正在尝试根据目的地 (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')))

谁能帮帮我

【问题讨论】:

    标签: mysql


    【解决方案1】:

    这是一个非常复杂的 WHERE 子句——维护起来将是一场噩梦。但问题是您的一个子查询(括号内的选择)正在返回多个值,而逻辑不允许这样做。对你来说最简单的事情(因为我没有你的数据)是分别运行每个子查询,看看哪个返回多个值,看看在那个地方它在逻辑上是否有意义。

    例如,你不能说

    Name = (SELECT Name FROM AllCustomers)
    

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

    Name IN (SELECT Name FROM AllCustomers)
    

    因为这为您提供了一个列表,其中列出了它成为 IN 的可能性。此外,您需要确保不仅您的所有子查询现在仅在适当的情况下返回一个答案,而且它们只能返回一个答案,否则当数据与数据不同时,您最终会在生产中遇到问题你测试过。

    【讨论】:

    • 非常感谢,我明白了
    • @Naveen 很高兴我能帮上忙!请将此答案标记为正确答案,以便其他 StackOverflow 人不会费心尝试回答 - 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多