在SQL Server 2014中...
我正在尝试查找表格中的行' new'表格中没有“旧”字样。我想把这些新行填充到我创建的第三个表中。表'新'有一个主键由两列MakeId和ModelId组成。以下SQL运行,但给了我太多的行。显然,我做错了什么。
select
new.MakeId ,
new.MageMakeId ,
new.ModelId ,
new.MageModelId
into BiUpdater..TranslateModel
from Mage_Production..TranslateModel new
left outer join BiLoader..TranslateModel old0 on new.MakeId = old0.MakeId
left outer join BiLoader..TranslateModel old1 on new.ModelId = old1.ModelId
go
答案 0 :(得分:2)
我的猜测是,您只想使用两个列进行一次连接:
select new.MakeId, new.MageMakeId, new.ModelId, new.MageModelId
into BiUpdater..TranslateModel
from Mage_Production..TranslateModel new left outer join
BiLoader..TranslateModel old
on new.MakeId = old.MakeId and new.ModelId = old.ModelId
where old.MakeId is null;
但更重要的是,您需要where
子句来获取不匹配。
编辑:
如果您要查找的行与MakeId
或ModelId
不匹配,那么这可能就是您想要的:
select new.MakeId, new.MageMakeId, new.ModelId, new.MageModelId
into BiUpdater..TranslateModel
from Mage_Production..TranslateModel new left outer join
BiLoader..TranslateModel old1
on new.MakeId = old1.MakeId left join
BiLoader..TranslateModel old2
on new.ModelId = old2.ModelId
where old1.MakeId is null and old2.ModelId is null;
您可能需要or
而不是and
,在这种情况下使用select distinct
。
答案 1 :(得分:0)
有一个名为EXCEPT的SQL语句可以执行此操作。这是一个链接 - http://msdn.microsoft.com/en-us/library/ms188055.aspx
你的右手桌是新的'而你的左手桌就是“老了”。
select *
into BiUpdater..TranslateModel
from (
select new.*
from Mage_Production..TranslateModel new
EXCEPT
select old.*
from BiLoader..TranslateModel old
)
或者,您可以使用左连接执行此操作:
select new.*
into BiUpdater..TranslateModel
from Mage_Production..TranslateModel new left join BiLoader..TranslateModel old
on new.MakeId = old.MakeId and new.ModelId = old.ModelId
where old.MakeId is null