0

我有 2 个如下表,并相应地将数据插入ftablefrom f_table。如果存在,我想插入field_3,否则插入.field3field_3field_4field3

我怎么做?非常感谢任何回复。

CREATE TABLE ftable
(
field1 int null,
field2 int null,
field3 char(1)
);

CREATE TABLE f_table
(
field_1 int null,
field_2 int null,
field_3 char(1),
field_4 char(1)
);

INSERT INTO ftable (field1, field2, field3) 
    SELECT (field_1, field_2, field_3) 
    FROM f_table;
4

2 回答 2

3

不确定如果field_3存在的真正含义-由于它是表的一部分,因此该列始终存在...

猜测您可能的意思是:如果是NOT NULL- 在这种情况下,请使用以下CASE语句:

INSERT INTO ftable (field1, field2, field3) 
    SELECT 
       field_1, field_2, 
       CASE
           WHEN field_3 IS NOT NULL THEN field_3
           ELSE field_4
       END
    FROM f_table;

更新:根据 w0lf 的建议,您还可以使用:

INSERT INTO ftable (field1, field2, field3) 
    SELECT 
       field_1, field_2, 
       ISNULL(field_3, field_4)
    FROM f_table;

在我看来,使它更紧凑-但可读性稍差。但这可以正常工作 - 如果field_3为 NULL,则field_4改为插入。

于 2012-10-29T07:31:34.337 回答
1

假设您的意思field_3NULL,这是一个使用的好地方COALESCE

INSERT INTO ftable (field1, field2, field3) 
SELECT field_1, field_2, COALESCE(field_3,field_4) 
FROM f_table;

COALESCE

返回其参数中的第一个非空表达式。

于 2012-10-29T07:33:13.813 回答