SQL查询:在2列上选择加入连接

时间:2014-10-14 21:54:39

标签: sql sql-server

在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

2 个答案:

答案 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子句来获取不匹配。

编辑:

如果您要查找的行与MakeIdModelId不匹配,那么这可能就是您想要的:

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