2014-12-24 33 views
3

我有2个表,tbl_NameCode和tbl_Bkp都有列ID和名称。比较两列的组合与SQL中的其他两个的组合

我必须从tbl_NameCode中选择不在tbl_bkp中的记录。

SELECT * FROM tbl_Bkp 
WHERE ? */COMBINATION OF ID,Name NOT IN (SELECT COMBINATION OF ID,NAME FROM tbl_NameCode)*/ 

如何比较两列组合与其他两列的组合?

+0

两个表是否具有相同的结构 –

+0

是的。两个表具有相同的结构。 – Sharon

回答

5

如果没有错Except运营商应该工作。

SELECT Id1,Id2,Id3,..Name FROM tbl_Bkp 
Except 
select Id1,Id2,Id3,..Name from tbl_NameCode 
2

使用LEFT JOIN来从左表中的所有记录,并添加其中与第二个表的空值的检查情况找到左表

的不匹配的记录试试这个:

SELECT NC.ID, NC.Name 
FROM tbl_NameCode NC 
LEFT OUTER JOIN tbl_bkp A ON NC.ID = A.ID AND NC.Name = A.Name 
WHERE A.ID IS NULL; 
1

您还可以尝试以下操作:

declare @tbl_NameCode table (id int, name varchar(100)) 

declare @tbl_Bkp table (id int, name varchar(100)) 

insert into @tbl_NameCode select 1, 'ABC' 
union select 2, 'XYZ' 
union select 3, 'PQR' 

insert into @tbl_Bkp select 1, 'ABC' 
union select 2, 'XXX' 
union select 3, 'PQR' 

select a.* from @tbl_Bkp a 
left join @tbl_NameCode b on convert(varchar, a.id) + a.name = convert(varchar, b.id) + b.name 
where b.id is null 
1

你可以连接字符串。如果您的ID是整数,然后投它nvcrchar(50)

​​
1

使用SQL EXISTS会让你一个很好的比较。并在不同的地方返回结果。在有大量记录的情况下,存在速度非常快且更可取。

SELECT ID,Name FROM tbl_Bkp t1 
WHERE NOT EXISTS (SELECT ID,Name FROM tbl_NameCode WHERE ID=t1.ID AND Name=t1.Name)