2012-03-26 2 views
1

Ich habe eine Tabelle namens notification, mit zwei Spalten:SQL INSERT mit einer Anweisung, wenn

  • Anbieter
  • E-Mail

Die Werte sehen wie folgt aus:

Für alle Anbieter, die die E-Mail [email protected] nicht haben, möchte ich mit dem Anbieter eine andere Zeile einzufügen und die E-Mail [email protected]. In der obigen Abfrage wäre das Ergebnis der INSERT-Anweisung beispielsweise: INSERT INTO notification VALUES ('apple', '[email protected]').

Ich habe eine Tabelle mit Tausenden von Zeilen wie folgt, wie würde ich eine solche INSERT Aussage schreiben?

+0

Verwendung von T-SQL - Transact-SQL bedingte Ausdrücke hat verschiedene Anweisungen auszuführen, basierend auf logischen Ausdrücken –

+0

Ihre Testdaten gegeben, würde nicht Sie möchten auch eine Zeile für abc einfügen? –

+0

Dem Provider 'abc' fehlt auch die Email' me @ me.com' (hat aber 'abc @ me.com'). – onedaywhen

Antwort

2
INSERT INTO notification 
SELECT DISTINCT provider, '[email protected]' 
FROM notification 
WHERE provider NOT IN 
(SELECT DISTINCT provider 
FROM notification 
WHERE email = '[email protected]') 
+0

Ich habe gerade das eingegeben! –

+0

Bedürfnisse deutlich. –

+0

"distinct" auf der inneren Abfrage gibt es, und es ist besser Leistung auch zu (etwas) (im Vergleich zu äußerlich auf der äußeren 'select') – hkf

0

Dies sollten Sie, was Sie nach:

insert into notification (provider, email) 
select distinct provider, '[email protected]' 
from notification 
where provider not in (
     select provider 
     from notification 
     where email like '[email protected]' 
    ) 
+0

Nein. Das würde für jeden Datensatz, der nicht wie [email protected] war, einen neuen Datensatz einfügen, im Gegensatz zu einem für jeden Anbieter, der kein [email protected] hat. –

+0

Ich löschte das fast so schnell wie ich es gepostet habe. –

Verwandte Themen