Was ich versuche zu tun ist, eine Tabelle mit einer anderen temporären Tabelle zu vergleichen, und wenn der Datensatz noch nicht existiert, fügen Sie ihn in die Tabelle ein. Mein Problem ist das IF NICHT EXIST scheint nicht korrekt zu sein. Wenn ich den Code auseinander ich habe das Problem ziehen ist:SQL Einfügen Datensatz, wenn nicht existiert
29 Ergebnisse Returns:
SELECT *
from NO_STOCK INNER JOIN #no_stock
ON NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE
WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE.
Dies lieferte keine Ergebnisse (ich würde erwarten, dass diese 34 zurück):
SELECT PRODUCT_CODE
FROM #no_stock
WHERE NOT EXISTS
(SELECT * from NO_STOCK INNER JOIN #no_stock
ON NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE
WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE)
Diese Erträge 63:
SELECT PRODUCT_CODE
FROM #no_stock
WHERE EXISTS
(SELECT * from NO_STOCK INNER JOIN #no_stock
ON NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE
WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE)
ps. Verwendung von SQL Server 2008 R2
Warum würde das besser funktionieren als NOT EXISTS? –
Danke das hat sehr geholfen !! Kann IN nicht in einer Situation benutzt werden, in der ich auch Datum überprüfen möchte? Also nur einfügen, wenn Produktcode und Datum nicht mit aktuellem Datum im selben Datensatz existieren? – user2158168
Nein, NOT IN vergleicht den Wert eines Elements mit dem Ergebnis einer SELECT-Anweisung, bei der eine Spalte zurückgegeben wird. Wenn Sie die Existenz mehrerer Werte überprüfen müssen, gehen Sie besser zurück zu NOT EXISTS – Melanie