Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 操作数应包含1列-使用Case语句更新和选择_Mysql - Fatal编程技术网

Mysql 操作数应包含1列-使用Case语句更新和选择

Mysql 操作数应包含1列-使用Case语句更新和选择,mysql,Mysql,几个小时以来,我一直在努力克服这个错误,但没有任何运气 UPDATE `users` t1 SET t1.`Earnings`= (SELECT SUM(ROUND(t2.`vCost`,2)) AS totalEarned, ( CASE WHEN t2.`vPayment` = 'CreditCard' THEN t1.`Earnings` = (t1.`Earnings` * 1.05) WHEN t2.`vPayment` = 'Cash' THEN t1.`Earn

几个小时以来,我一直在努力克服这个错误,但没有任何运气

  UPDATE `users` t1

SET t1.`Earnings`= (SELECT SUM(ROUND(t2.`vCost`,2)) AS totalEarned,
(
CASE 
   WHEN t2.`vPayment` = 'CreditCard' THEN t1.`Earnings` = (t1.`Earnings` * 1.05)
   WHEN t2.`vPayment` = 'Cash' THEN t1.`Earnings` = (t1.`Earnings` * 1.25)
END
) AS total

FROM `transactions` t2 WHERE t2.`ID` = t1.`ID` AND t2.payout != 'PAIDOUT')
当前结构:

:::Transactions Table:::
ID,
UserID,
Cost

:::User Table:::
ID,
UserID,
Earnings
结果:

Operand should contain 1 column(s)
当前代码:

 UPDATE `users` u 
SET u.currentPayout = (SELECT SUM(ROUND(s.vCost,2)) AS totalEarned s
                       FROM transactions s
                       WHERE s.USERID = u.USERID AND s.payout != 'PAIDOUT'
当前代码计算并成功保存了它,但是,我想在查询中实现vPayment作为一个因子


因此,如果V付款等于现金,则将其乘以1.25。

这就是您要查找的内容(编辑)


这就是你想要的(编辑)


是的,但它返回:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在“WHERE t2.”附近使用的正确语法。
payout`!='第10行“@FilipBusic I”中的PAIDOUT”删除了
选择(语法不正确)。不过,我不确定逻辑。如果您在预期结果中包含一些示例数据,那会更好。我尝试了您更新的解决方案,但结果保持不变。。我正在尝试计算用户表中与事务表中ID相同的每个用户的vCost总数。然后我试着将计算出的成本设置为表1s,收益。我更新了这个问题,让它更清晰。太好了!很好,谢谢你的帮助。我猜IF语句中的第一个语句是真的,第二个语句是假的?1.25==真,1.05==假?@FilipBusic是的,没错。只要
vPayment
只接受两个值,即“Cash”和“CreditCard”,这将起作用。是的,但它返回:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在“WHERE t2.”附近使用的正确语法。
payout`!='第10行“@FilipBusic I”中的PAIDOUT”删除了
选择(语法不正确)。不过,我不确定逻辑。如果您在预期结果中包含一些示例数据,那会更好。我尝试了您更新的解决方案,但结果保持不变。。我正在尝试计算用户表中与事务表中ID相同的每个用户的vCost总数。然后我试着将计算出的成本设置为表1s,收益。我更新了这个问题,让它更清晰。太好了!很好,谢谢你的帮助。我猜IF语句中的第一个语句是真的,第二个语句是假的?1.25==真,1.05==假?@FilipBusic是的,没错。只要
v付款
只接受两个值,即“现金”和“信用卡”,这就可以工作。
UPDATE `users` u 
SET u.`Earnings` = (SELECT SUM(ROUND(s.vCost * IF(`vPayment` = 'Cash', 1.25, 1.05), 2)) 
                    FROM transactions s
                    WHERE s.USERID = u.USERID AND s.payout != 'PAIDOUT'