我在其中一个数据库表中添加了一个新列。我想尝试填充该列以用于以前的记录。新记录将通过表格进行验证。这是一个例子。
| Quantity | Description | Price | Amount | Type |
----------------------------------------------------------
| 3 | Storage for Pallets | 3.99 | 11.97 | NULL |
| 3 | Handling for Pallets| 3.99 | 11.97 | NULL |
| 3 | Misc expense | 3.99 | 11.97 | NULL |
----------------------------------------------------------
我想根据描述中的关键字替换这些空值。例如,更新的表格如下所示。
| Quantity | Description | Price | Amount | Type |
--------------------------------------------------------------
| 3 | Storage for Pallets | 3.99 | 11.97 | Storage |
| 3 | Handling for Pallets| 3.99 | 11.97 | Handling |
| 3 | Misc expense | 3.99 | 11.97 | Misc |
--------------------------------------------------------------
有关更新声明的任何想法将实现此目的吗?
答案 0 :(得分:0)
因为没有主键,所以您将值放入所有列的where子句中。值。或者至少足够,以便根据您对数据的了解,更新不会超过2行。
以下是第一次更新的例子:
update tbl
set "Type" = 'Storage'
where "Quantity" = 3
and "Description" = 'Storage for Pallets'
and "Price" = 3.99
and "Amount" = 11.97;
<强>小提琴:强> http://sqlfiddle.com/#!12/9fa64/1/0
如果有主键,则WHERE子句会更简单:
where pk_id_field = x
(因为您可以放心,知道您即将更新所需的确切行,并且没有其他行具有该值)
答案 1 :(得分:0)
比我想象的要简单
UPDATE
invoice_line_items
SET
line_item_type = "Storage"
WHERE
description like "%storage%";
.....等等
答案 2 :(得分:0)
实际上:如果你总是想要描述该类型的第一个单词,你可以使用
UPDATE Invoice_Line_Items
SET line_item_type = SUBSTRING_INDEX(description, ' ', 1);
见SQL Fiddle。当然,你可以添加一个WHERE
条款,如果它对整个表格来说不是那么简单......而且你不仅限于第一个单词......