2016-10-28 97 views
0

我不知道,如果下面的代码是正确的,我只是试图在另一个表中没有插入数据,我不知道如果我可以在括号中使用的两列where ([Event],[Event Start DateTime])插入数据不在另一个表

insert into CPEvents3 select * from CPEvents1 where ([Event],[Event Start DateTime]) not in 
(select [Event], [Event Start DateTime] from CPEvents3) 

感谢,S

+2

OT:如果这是在您的控制之下,我会避免像'[Event Start DateTime]'这样的列名。在这种特殊情况下,我甚至不确定,如果* DateTime *真的是列名称的一部分或从声明中获取的数据类型......最好是没有空格的普通名称。您可能会使用下划线... – Shnugo

回答

1

这样,我们需要写

INSERT INTO CPEVENTS3 
([Event],[Event Start DateTime]) 
select [Event], 
[Event Start DateTime] 
FROM CPEvents1 CP 
where NOT EXISTS 
(
SELECT [Event], [Event Start DateTime] 
from CPEvents3 
WHERE CP.[Event] = [Event]) 

OR

INSERT INTO CPEVENTS3 
([Event], 
[Event Start DateTime] 
) 
select [Event],[Event Start DateTime]FROM CPEvents1 
EXCEPT 
select [Event],[Event Start DateTime]FROM CPEvents3 
+0

对于[事件开始日期时间]'不存在'错过谓词' –

+0

到Ivan Starostin:什么是错过的存在,整个查询应该是什么?谢谢 –

+0

@JoeGreen'EXCEPT'例子很好 –

0

你可以写这样也

insert into CPEvents3 
select * from CPEvents1 where 
[Event] not in (select [Event] from CPEvents3) 
and [Event Start DateTime] not in (select [Event Start DateTime] from CPEvents3) 
-1

你不能在比较同时两列。您需要为每个列创建这样的条件:

insert into CPEvents3 
select * from CPEvents1 c1 where 
    [Event] not in (select [Event] from CPEvents3) and 
    [Event Start DateTime] not in (select [Event Start DateTime] from CPEvents3) 

指定插入和选择列表中的列是一种很好的做法。

+0

这两个查询会给出不同的输出,这两个例子都会返回错误的结果。 –

+0

我更新了我的答案 – Bogdan

0

一种方法是使用outer join来查找出现在一个表中但不出现在另一个表中的那些记录。这些可以插入。

-- Add new records to CPEvents3. 
INSERT INTO CPEvents3 
    (
     [Event], 
     [Event Start DateTime]  
    ) 
SELECT 
    c1.[Event], 
    c1.[Event Start DateTime] 
FROM 
    CPEvents1 AS c1 
     LEFT OUTER JOIN CPEvents3 AS c3  ON c3.[Event]     = c1.[Event] 
              AND c3.[Event Start DateTime] = c1.[Event Start DateTime] 
WHERE 
    c3.[Event] IS NULL 
; 
0

请尝试以下查询它会正常工作

INSERT INTO CPEvents3 
SELECT * 
FROM CPEvents1 LEFT OUTER JOIN CPEvents3 
ON CPEvents3.[Event]= CPEvents1.[Event] 
AND CPEvents3.[Event Start DateTime] = CPEvents1.[Event Start DateTime] 
WHERE CPEvents3.[Event] IS NULL 

选择在一个表中存储的数据,并使用比较的一个或多个列,你可以使用左侧另一个未发现参与这些列上并设置一个conidtion,其中一个来自第二个表的连接列为null。因此,查询只返回在第一个表中找到的数据,而在另一个表中找不到数据。

+0

尽管这段代码可能有助于解决问题,但它并不能解释为什么和/或它如何回答问题。提供这种附加背景将显着提高其长期价值。请编辑您的答案以添加解释,包括适用的限制和假设。 – jmattheis

相关问题