2017-08-24 1 views
3

J'ai une déclaration comme celle-Comment exclure des lignes dans l'instruction SQL Server Insert?

insert into A (id, nid) 
(
    select id, 100 as nid 
    from B 
    group by id 
) 

cela fonctionne, mais le problème est le tableau A, a une contrainte de clé primaire sur (id, JNV), et quelques-unes des lignes de la requête imbriquée calculée, existent déjà dans la table A. Comment puis-je les exclure de la requête imbriquée?

Merci

+0

utiliser l'instruction de fusion et ignorer les correspondances – SMor

Répondre

4

Vous pouvez utiliser EXCEPT:

insert into A (id, nid) 
select id, 100 as nid 
from B 
group by id 
EXCEPT 
SELECT id, nid 
FROM A; 
2

juste vérifier si les lignes existent ...

insert into A (id, nid) 
select id, 100 as nid 
from B 
WHERE NOT EXISTS (SELECT * FROM A WHERE A.id = B.id AND A.nid = 100) 
group by id 

PS: la parenthèse autour de votre sélection ne sont pas nécessaires

1

Ajouter Clause Where:

insert A (id, nid) 
select id, 100 as nid 
from B 
Where Not exists (Select * from A 
        Where id = B.Id 
        and nid = 100) 
group by id