我的时区下午好。
我必须在表中插入一行,但其中一列是来自另一个表的值。所以我想要完成的是这样的
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
我怎样才能实现这个目标?
提前致谢 最好的问候
答案 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值。希望有道理。