在table1中是table2对面的一些变化。我需要只使用table2中与table2相对的值缺少table3。
表1
Column1
a
b
d
e
g
h
i
表2
Column1
a
b
c
d
e
f
代码:
INSERT INTO [dbo].[table3]
SELECT *
FROM [dbo].[table2]
WHERE NOT EXISTS (SELECT *
FROM [dbo].[table1]
WHERE [dbo].[table2].column1 = [dbo].[table1].column1
AND [dbo].[table2].column1 = [dbo].[table1].Pernr);
我收到错误:
Msg 213,Level 16,State 1,Line 1
列名或提供的值数与表定义不匹配。
我需要:
表3
Column1
c
f
昨天我的剧本工作但是今天出错......我不知道为什么?
感谢您的意见
答案 0 :(得分:4)
使用insert
时列出列:
INSERT INTO [dbo].[table3](column1)
SELECT t2.column1
FROM [dbo].[table2] t2
WHERE NOT EXISTS (SELECT 1
FROM [dbo].[table1] t1
WHERE t2.column1 = t1.column1
);
当然,插入可以有多个列。只需在insert
和select
中列出所有这些内容。
我不知道Pernr
是什么。这不是你问题的一部分。当然,您可以在子查询中为WHERE
子句添加其他子句。
如果table3
不存在,请使用select into
而不是insert
:
SELECT t2.*
INTO table3
FROM [dbo].[table2] t2
WHERE NOT EXISTS (SELECT 1
FROM [dbo].[table1] t1
WHERE t2.column1 = t1.column1
);
答案 1 :(得分:1)
DECLARE @Table1 TABLE (Column1 VARCHAR(2))
INSERT INTO @Table1 VALUES ('a'),('b'),('d'),('e'),('g'),('h'),('i')
DECLARE @Table2 TABLE (Column1 VARCHAR(2))
INSERT INTO @Table2 VALUES ('a'),('b'),('c'),('d'),('e'),('f')
DECLARE @Table3 TABLE (Column1 VARCHAR(2))
INSERT INTO @Table3
SELECT
*
FROM @Table2 T2
WHERE T2.Column1 NOT IN
(SELECT Column1 FROM @Table1)
SELECT
*
FROM @Table3
答案 2 :(得分:1)
你可以只使用"而不是" - 子查询如下
select * into #yourTable3 from #yourtable2
where column1 not in (select column1 from #yourtable1 where column1 is not null)
你的桌子:
create table #yourtable1 (column1 varchar(10) )
insert into #yourtable1 (
Column1 ) values
('a')
,('b')
,(null )
,('d')
,('e')
, ( null )
,('g')
,('h')
,('i')
create table #yourtable2 (column1 varchar(10))
insert into #yourtable2 (column1 ) values
('a')
,('b')
,('c')
,('d')
,('e')
,('f')