我的表名是产品,我正在尝试更新 products_price,以便所有价格都99p
在最后。你能帮我吗?
这个请求也有点简单(我是新手SQL
!)我想更新所有记录如下
categories
> 0中的任何内容 parent_id
我需要脚本将所有记录更新为零。
因此,您希望截断所有价格,然后添加0.99
货币单位。将值截断到小数点后 0 位的功能因 DBMS 而异;我假设它被称为 TRUNC,但它可能在您的 DBMS 中被称为 FLOOR 或其他名称:
UPDATE Products
SET Products_Price = TRUNC(Products_Price) + 0.99;
这里不需要 WHERE 子句。我假设没有负价格;如果这是可能的,那么你需要在你的分配上更聪明一点(也许是一个 CASE 表达式;也许你有一个可用的函数 SIGN、SIGN、SIGNUM)。
请注意,我假设p
引用的是便士,如“英镑(英镑)和便士”。如果价格在 0.00 英镑到 0.99 英镑之间,则结果为 0.99 英镑;如果价格在 1.00 英镑到 1.99 英镑之间,则结果为 1.99 英镑;等等。 TRUNC 或 FLOOR 将从价格中删除任何小数部分,加上 0.99 则意味着结果的形式为 £ x .99 (非负)整数值x。
对你的意思做出一些假设:
UPDATE Categories
SET Anything = 0
WHERE Anything > 0
AND Parent_ID > 0;
如果您的意思是要以某种方式更新产品表,那么您的问题需要更加精确。
来自评论:
我想将表中的所有
parent_id
值更新categories
为零,其中parent_id > 0
.
据推测,必须有一些parent_id
值为空或负的值,所以你需要:
UPDATE Categories
SET Parent_ID = 0
WHERE Parent_ID > 0
如果没有空值和负数,那么您可以运行更简单的更新:
UPDATE Categories
SET Parent_ID = 0
它将那些父 ID 已经为零的行以及那些没有的行设置为零。这可能会比更具选择性的更新更严重地影响日志(例如,将有更多更改记录在逻辑日志中或 DBMS 的等效项中),但除非有大量记录并且其中大多数已经有零父 ID 并且 DBMS 无法识别记录何时未更改并为未更改的行写入日志记录,那么您不太可能注意到差异
将价格设置为最后 99 便士:
update products_price set price = floor(price)+0.99;
将 parent_id 设置为 0:
update categories set parent_id = 0 where parent_id > 0;