SQL集单元格值取决于相邻单元格值

时间:2015-01-08 23:19:53

标签: mysql sql database sql-update

我在其中一个数据库表中添加了一个新列。我想尝试填充该列以用于以前的记录。新记录将通过表格进行验证。这是一个例子。

| 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     |
--------------------------------------------------------------

有关更新声明的任何想法将实现此目的吗?

3 个答案:

答案 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条款,如果它对整个表格来说不是那么简单......而且你不仅限于第一个单词......