SQL INSERT from select with NULL values

时间:2018-04-24 15:27:44

标签: sql sql-insert sybase-ase

我的时区下午好。

我必须在表中插入一行,但其中一列是来自另一个表的值。所以我想要完成的是这样的

INSERT TABLE_NAME(COL1,COL2,COL3,COL4) VALUES("VAL1","VAL2","VAL3",(SELECT COL_A FROM TABLE2 WHERE COL_B = 'X'))

但我认为以上代码是不可能的,所以我使用以下代码:

INSERT INTO TABLE_NAME(COL1,COL2,COL3,COL4) 
SELECT "COL1","COL2","COL3", COL_A FROM TABLE2 T2
WHERE COL_B= "X"

我的问题是: 我想插入值,即使select不返回值,在这种情况下COL4将为NULL

我怎样才能实现这个目标?

提前致谢 最好的问候

3 个答案:

答案 0 :(得分:0)

不,您不能插入不在表格中的行。

如果您期望一行(在匹配的情况下),您可以使用聚合:

INSERT INTO TABLE_NAME(COL1, COL2, COL3, COL4) 
    SELECT "COL1","COL2","COL3", MAX(COL_A)
    FROM TABLE2 T2
    WHERE COL_B = 'X';

如果没有匹配,这将返回NULL - 但即使表中有多个匹配项,也会返回一行。

答案 1 :(得分:0)

正如我从您的描述中所理解的,只有一列是NULL,其他3列是值。您应该使用Select INTO作为https://www.w3schools.com/sql/sql_select_into.asp

SELECT COL1,COL2,COL3,COL4 INTO TABLE2 FROM TABLE_NAME WHERE COL_B= "X"

答案 2 :(得分:0)

您可以创建一个临时表来存储TABLE2的主键(例如TABLE2具有主键'X','Y')

CREATE TABLE #TempPK (COLB int null);

insert into #TempPK(COLB) values ('X');
insert into #TempPK(COLB) values ('Y');

-然后您对插入的from select语句进行FULL OUTER JOIN

INSERT INTO TABLE_NAME(COL1, COL2, COL3, COL4) 
    SELECT "COL1","COL2","COL3", MAX(COL_A)
    FROM TABLE2 T2 FULL OUTER JOIN  #TempPK TPK
    ON T2.COL_B = TPK.COLB

这样,您应该能够同时插入行(X和Y),并且行X应该在整个行中显示NULL值。希望有道理。