2014-06-27 35 views
0

对不起,因为不好的标题,不知道如何很好地说出我的问题。 现在我有两个表:如何插入项目名称不在表A中的所有行到表B中的表A

表A:

GUID   Project State 
1####  A ###  Active 
2####  B ###  Active 
3####  C###  Active 
4####  D ###  Active 

表B是资源表中,有几列,一列也是项目,我想的东西做的是:

如果表B中有一个不在表A中的项目,请将其添加到表A中,并为其指定GUID和非活动状态。

但我不知道如何实现这一点,尝试了几个插入选择,不工作,假设我需要使用存在条件?

回答

2

您可以使用NOT IN和子查询。就像这样:

INSERT INTO TableA (....) 
    SELECT 
    .... 
    FROM TableB 
    WHERE Project NOT IN (SELECT Project FROM TableA) 

这也可以用左手完成加入这样的:

INSERT INTO TableA (....) 
    SELECT 
    .... 
    FROM TableB B 
    LEFT JOIN TableA A ON B.Project = A.Project 
    WHERE A.Project IS NULL 

你可以看到你的服务器软件多好通过检查执行计划是这两个相同查询。

+0

不错,整洁,谢谢! – SSilicon

0
INSERT INTO A 
SELECT some_way_to_get_guid(), b.project, 'inactive' FROM B 
WHERE b.project NOT IN (SELECT project FROM A); 

WHERE子句是所谓的反半

+0

(Hogan击败了我。) –

+0

从来不知道以前没有... – SSilicon

+0

@AndrewLazarus - 你对“反半连接”的评论让我加入了连接的例子。 – Hogan

相关问题