gpt4 book ai didi

mysql - 具有多个 IF 语句的 ON DUPLICATE KEY UPDATE

转载 作者:行者123 更新时间:2023-11-29 18:52:59 27 4
gpt4 key购买 nike

因此,我有一个名为发票的表,其目的是在重新提交数据时根据金额值更新其列状态。

例如,我有这组结果:

<table>
<thead>
<tr>
<th>Sap Code</th>
<th>Document No.</th>
<th>Description</th>
<th>Net Change</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>8000000</td>
<td>123456</td>
<td>March invoice A</td>
<td>Not Paid</td>
</tr>
</tbody>

使用多个 IF 语句来实现这一点,我尝试仅使用一个条件,但不起作用。不确定这是 SQL 问题还是 PDO 问题,因为我正在绑定(bind)参数。

如果金额相同,我希望我的查询将状态更新为“已付款”;如果新金额小于当前金额,则将状态更新为“各方付款”。如果记录是新的,则状态为“未付款”。

这是我当前的查询:

INSERT INTO invoice (sap_code, document_number, description, net_change, status) 
VALUES (:sap_code,:document_number,:description,:net_change, 'Not payed')
ON DUPLICATE KEY UPDATE
sap_code= :sap_code, document_number= :document_number, description= :description,
status = if(VALUES(net_change) = :net_change, VALUES(status), 'Paid')

对我做错了什么有什么建议吗?

提前致谢。

新测试(不起作用)

ON DUPLICATE KEY UPDATE 
sap_code= :sap_code, document_number= :document_number, description= :description,
status = CASE WHEN :net_change = net_change
THEN 'Paid'
ELSE 'Partially Paid' END,
net_change = :net_change

最佳答案

您应该将 VALUES(net_change) 与表中的列进行比较,而不是与所分配的参数进行比较。

ON DUPLICATE KEY UPDATE 
sap_code= :sap_code, document_number= :document_number, description= :description,
status = IF(:net_change = net_change, 'Paid', VALUES(status)),
net_change = :net_change

关于mysql - 具有多个 IF 语句的 ON DUPLICATE KEY UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44294254/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com