在SQL中比较两列与其他两个组合的组合

时间:2014-12-24 08:39:53

标签: sql sql-server sql-server-2008 select join

我有2个表,tbl_NameCode和tbl_Bkp都有列ID和名称。

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

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

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

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

使用 LEFT JOIN 从左表中获取所有记录并添加where条件并检查第二个表的空值以查找左表的不匹配记录

试试这个:

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;

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

答案 3 :(得分:1)

你可以连接字符串。如果您的ID是整数,则将其转换为nvcrchar(50)

SELECT * FROM tbl_Bkp 
WHERE ID+''+Name NOT IN (SELECT cast(ID as nvarchar(50))+''+NAME FROM tbl_NameCode 

答案 4 :(得分: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 )