Mysql “子查询返回多行”时使用大小写

Mysql “子查询返回多行”时使用大小写,mysql,case,Mysql,Case,当用户有两个大人和一个小孩预订时,我似乎很难给他们折扣……输出文本如标题所示。虽然我知道这个问题,但我不确定如何解决它,使结果更加独特 作为参考,价格来自另一个表,但其他一切都在预订中 感谢您的帮助 UPDATE BOOKING SET TotalCost= (SELECT SUM( CASE WHEN NumAdults = 2 AND NumChilds = 1 THEN (NumAdults*(SELECT Cost FROM prices WHERE AgeType = 'Adult'

当用户有两个大人和一个小孩预订时,我似乎很难给他们折扣……输出文本如标题所示。虽然我知道这个问题,但我不确定如何解决它,使结果更加独特

作为参考,价格来自另一个表,但其他一切都在预订中

感谢您的帮助

UPDATE BOOKING SET TotalCost=
(SELECT SUM(

CASE WHEN NumAdults = 2 AND NumChilds = 1 THEN
(NumAdults*(SELECT Cost FROM prices WHERE AgeType = 'Adult'))
+
(NumChilds*(SELECT Cost FROM prices WHERE AgeType = 'Child' / 2))


ELSE
(NumAdults*(SELECT Cost FROM prices WHERE AgeType = 'Adult'))
+
(NumChilds*(SELECT Cost FROM prices WHERE AgeType = 'Child'))
END
))
WHERE BookID  = 1
此NumAdults*的所有发生从AgeType=‘成人’的价格中选择成本

应为NumAdults*从AgeType=‘成人’的价格中选择SUMCost

在这里,您将Numadults与resultset相乘


希望这有帮助

基本修复方法是在子查询中求和:-

UPDATE BOOKING SET TotalCost=
(
    CASE 
        WHEN NumAdults = 2 AND NumChilds = 1 
        THEN
            (NumAdults * (SELECT SUM(Cost) FROM prices WHERE AgeType = 'Adult'))
            +
            (NumChilds * (SELECT SUM(Cost) FROM prices WHERE AgeType = 'Child' / 2))

        ELSE
            (NumAdults * (SELECT SUM(Cost) FROM prices WHERE AgeType = 'Adult'))
            +
            (NumChilds * (SELECT SUM(Cost) FROM prices WHERE AgeType = 'Child'))
    END
)
WHERE BookID  = 1
但我不相信如果我们能看到表描述和一些示例数据,没有更好的方法来完成整个查询

例如,如果成人和儿童的价格是唯一的,那么可以这样做:-

UPDATE BOOKING a
LEFT OUTER JOIN prices pa ON pa.AgeType = 'Adult'
LEFT OUTER JOIN prices pc ON pc.AgeType = 'Child'
SET TotalCost = CASE 
                    WHEN NumAdults = 2 AND NumChilds = 1 
                    THEN NumAdults * pa.Cost + (NumChilds * pc.Cost / 2)
                    ELSE NumAdults * pa.Cost + NumChilds * pc.Cost
                END
WHERE BookID  = 1

考虑提供“创建”和“插入”语句,并且期望的结果是,对于成人的AgType只有一行,而对于一个孩子的AgType的成本只有一行呢?这一个工作,在我的部分是一个相当业余的错误,所以谢谢帮助……标记为解决……也感谢其他的Puffin Suin快速回答。