2016-10-28 5 views
0

Ich bin nicht sicher, ob unter dem Code korrekt ist, ich habe gerade versucht, Daten nicht in einer anderen Tabelle einfügen, ich bin nicht sicher, ob ich zwei Spalten in Klammern verwenden kann where ([Event],[Event Start DateTime])Insert Daten nicht in einer anderen Tabelle

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

Danke, S

+2

OT: Wenn dies unter Ihrer Kontrolle ist, würde ich Spaltennamen wie '[Event Start DateTime]' vermeiden. In diesem speziellen Fall bin ich mir nicht einmal sicher, ob das * DateTime * wirklich Teil des Spaltennamens oder des Datentyps aus der Deklaration ist ... Am besten sind einfache Namen ohne Leerzeichen. Du könntest Unterstriche verwenden ... – Shnugo

Antwort

1

auf diese Weise wir

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]) 

ODER

schreiben müssen auch
+0

'Not exists 'vermisst Prädikat für' [Event Start DateTime] ' –

+0

an Ivan Starostin: was fehlt für Nicht existiert, wie soll die ganze Abfrage sein? Danke –

+0

@JoeGreen 'EXCEPT' Beispiel ist in Ordnung –

0

können Sie auf diese Weise schreiben

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

Sie sind nicht in der zwei Spalten gleichzeitig vergleichen. Sie müssen für jede Spalte eine Bedingung wie folgt machen:

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) 

Es ist gute Praxis geben Sie die Spalten in dem Einsatz und der Auswahlliste.

+0

Diese beiden Abfragen würden unterschiedliche Ausgabe geben, beide Beispiele würden falsches Ergebnis zurückgeben. –

+0

Ich aktualisiere meine Antwort – Bogdan

0

Eine Methode besteht darin, mit outer join diejenigen Datensätze zu suchen, die in einer Tabelle, aber nicht in der anderen Tabelle erscheinen. Diese können dann eingefügt werden.

-- 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

die folgende Abfrage versuchen wird, es funktioniert gut

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 

Daten in einer Tabelle gespeichert zu wählen, und nicht in einer anderen gefunden auf einer oder mehr Spalt vergleichen können Sie links auf diesen Spalten verwenden beitreten und Setzen einer Conidtion, dass eine der Joins Spalten aus der zweiten Tabelle null ist. Daher gibt die Abfrage nur Daten zurück, die in der ersten Tabelle gefunden wurden und nicht in der anderen.

+0

Obwohl dieser Code helfen kann, das Problem zu lösen, erklärt es nicht, warum und/oder wie es die Frage beantwortet. Die Bereitstellung dieses zusätzlichen Kontexts würde seinen langfristigen Wert erheblich verbessern. Bitte bearbeiten Sie Ihre Antwort, um eine Erläuterung hinzuzufügen, einschließlich der Einschränkungen und Annahmen. – jmattheis

Verwandte Themen