INSERT INTO和DELETE ... IF / WHERE一个列在不同的表中

时间:2010-08-25 20:15:04

标签: sql-server

只有当tableB中的特定列等于某个值时,我才能使用什么语句来INSERT INTO tableA新行,其中tableB包含“itemid”,tableA也包含“itemid”。我想到了INNER JOIN,但这有可能吗?

我还需要完全相同的DELETE方法。

5 个答案:

答案 0 :(得分:7)

听起来你想要的是这个:

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

如果我正确理解你的模式,你就不能进行INNER JOIN,因为tableA还没有匹配的行。

现在要删除,你现在都有这两行,所以你将进行连接:

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

根据OP的评论和他自己的答案更新。这应该允许项目和项目之间的1到多个关系。项目

答案 1 :(得分:2)

  

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

     

SELECT table2.col1,ect FROM
  table1表INNER JOIN table2 table2                  ON table.col1 = table2.col   WHERE table2.value => '某物'

答案 2 :(得分: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'

答案 3 :(得分:0)

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

对delete执行相同操作,但将insert语句更改为delete语句

答案 4 :(得分:-1)

以下是我解决它的方法:

IF(SELECT active FROM projects WHERE projectid ='@ projectidval')<> 1 INSERT INTO items(projectid,description)VALUES('@ projectidval','@ descriptionval')