如何在其他列中将数据插入到没有NULL的特定列中?

时间:2015-05-18 15:18:00

标签: sql postgresql insert

我有一个表(“table1”)有3列,名为col1,col2和col3(每个都是VARCHAR),有4个值,如下所示:

col1   col2   col3
datA1  datB1  datC1
datA2  

我需要能够随时将数据添加到任何不影响其他列的列中。互联网上非常流行的代码是(例如,我们只需要将数据添加到列col2和col3):

INSERT INTO table1 (col2, col3)
VALUES ('datB2', 'datC2');

但它添加了新行,如下所示:

col1   col2   col3
datA1  datB1  datC1
datA2
NULL   datB2  datC2

我真正需要的是使用新值填充“col1”列中值“datA2”开头的行,并获取如下表格:

col1   col2   col3
datA1  datB1  datC1
datA2  datB2  datC2

如果有人可以帮助我,我将非常感激! 谢谢。 Arsenii。

更新: 该表有3列,每列响应特定类型的值(例如:名称,颜色,大小)。我需要的是可以在特定列中随时添加新值,并且如果之前有一个空闲单元格,则可以不使用Null和新行。

7 个答案:

答案 0 :(得分:1)

如果要将数据添加到现有行,则必须使用UPDATE语句。像这样举例如:

UPDATE table1 SET
col2 = 'data5'
col3 = 'data6'
FROM table1
WHERE col1 = 'data4'

此外,您的问题根源似乎是数据库设计不佳,但此查询只是为了向您展示如何将数据添加到现有行。

答案 1 :(得分:1)

我找到了解决方案(一系列逻辑操作):

1)CHECK如果某个单元格(在目标列中)的值为""NULL

2)IF它有一个然后重写第一个保持该行中其他单元格的值在他们的位置(可能我们使用UPDATE))))。

3)ELSE只需在行的另一个单元格中添加一个包含所有NULL的新行。

如果我们想要同时在各个列中添加一些值,我们可以为所有这些列准备查询,然后同时执行它们(对于重言式抱歉)。

如果我们需要在一个查询中向同一列添加一些值,我们可以使用循环(重复第1段和第2段(或者,可选,3))来准备它。

答案 2 :(得分:1)

UPDATE table1
SET col2 = dataB2, col3 = dataC2
WHERE col1 = dataA2;

这可能符合您的目的:)

答案 3 :(得分:0)

给定一个表结构,有两个数据行:

key         value
--------------------
team        accounts
manager     jeff

每次要更改值时,都需要检查它是否已存在(用于更新)或不存在(用于插入)。因此,要更改manager属性的值:

if exists(select * from keyValues where key = 'manager')
    update keyValues set value = 'mike' where key = 'manager'
else
    insert into keyValues ('manager', 'mike')

答案 4 :(得分:0)

假设您有表格
CLIENT_MASTER

客户编号名称
C00001伊万
C00002 Himanshu

现在您添加一个新列City

ALTER table CLIENT_MASTER  
ADD( City varchar(10));

现在,如果要在现有行中添加值,则可以使用UPDATE命令。
例如

UPDATE CLIENT_MASTER  
SET City='Delhi'  
WHERE ClientNo='C00001';

更新后的表格是
客户没有名字的城市
C00001伊万·德里
C00002 Himanshu NULL

答案 5 :(得分:-1)

使用此:

INSERT INTO table1 (col2, col3)
VALUES ('datB2', 'datC2')
WHERE col1 = datA2;

答案 6 :(得分:-3)

使用此值,如果值为null,则插入空值。

$cal1=$cal1 ? "data5" : '';
$cal2=$cal2 ? "data6" : '';
INSERT INTO table1 (col2, col3)
VALUES ("'.$cal1.'", "'.$cal2.'");