2010-08-25 11 views
0

Quelle instruction puis-je utiliser pour INSERT INTO tableA une nouvelle ligne UNIQUEMENT SI une colonne spécifique dans tableB est égale à une valeur, où tableB contient "itemid" et tableA inclut "itemid" aussi. J'ai pensé à INNER JOIN, mais est-ce possible?INSERT INTO et DELETE ... IF/WHERE une colonne dans une table différente

J'ai également besoin exactement de la même approche pour DELETE.

+0

Pour clarifier la question, supposons que j'ai "projet" et dans le cadre de ce projet "articles". Je veux INSÉRER DANS la table d'éléments pour ce projet spécifique SEULEMENT SI la colonne "active" de ce projet est mise à "1" par exemple. De cette façon, je ne peux pas insérer/supprimer des enregistrements pour ce projet s'il est INACTIF. – johnshaddad

+0

Pour être honnête, vos commentaires rendent votre question plus confuse plutôt que d'expliquer vos besoins. Pouvez-vous s'il vous plaît poster quelques exemples de données? – Kashif

Répondre

7

Il ressemble à ce que vous voulez est ceci:

insert into items(projectid,description) 
select P.ProjectId, '@descriptionval' 
from Projects P 
where P.Active = 1 and P.ProjectID = '@projectidval' 

Si je comprends bien votre schéma correctement, vous ne pouvez pas faire une INNER JOIN, parce que tableA n'a pas encore de ligne correspondante.

Maintenant, pour la suppression, vous avez à la fois la ligne maintenant et vous fera le rejoindre:

DELETE FROM Items I 
inner join Projects P on I.ProjectId = P.ProjectId 
where P.Active = 1 and I.ProjectID = @ProjId 

MIS À JOUR basé sur le commentaire de l'OP à la question et sa réponse. Cela devrait permettre une relation de 1 à plusieurs entre les projets & Articles.

+0

Vous pouvez ajouter une vérification à l'insertion pour vous assurer que l'enregistrement n'existe pas déjà dans la table dans laquelle vous insérez. – HLGEM

+0

J'inclurais une table de jointure gauche A sur b.itemid = a.itemid ... où a.itemid est null' sur l'insert juste pour s'assurer que ItemId n'existe pas dans tableB. –

+0

@HLGEM & @Joe: Selon le commentaire de l'OP, c'est un nombre à 1, donc c'est en fait comme ça. –

0
if exists(select * from TableA,TableB where TableA.itemID = TableB.itemID and TableB.Col = somevalue) 
begin 
    insert into .... 
end 

Faites la même chose pour changer de suppression, mais l'instruction d'insertion à une instruction delete

2

INSERT INTO table (col1, col2, col3, col4)

SELECT table2.col1, ect DE
table table1 INNER JOIN table2 table2 SUR table.col1 = table2.col OÙ table2.value => 'quelque chose'

+0

+1 pour être le premier – DForck42

1
INSERT INTO tableA (col1, col2) 
SELECT col1, col2 
FROM tableA a INNER JOIN tableB b ON a.itemid= b.itemid 
AND b.somevaluecol = 'somevalue' 

DELETE FROM tableA a 
INNER JOIN tableB b ON a.ItemId = b.ItemId 
WHERE b.somevaluecol = 'somevalue' 
-1

Voici comment je l'ai résolu:

IF (SELECT actif des projets OU projectId = '@ projectidval') <> 1 INSERT INTO articles (ProjectID, description) VALUES ('@projectidval', '@descriptionval')

Questions connexes