我有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 )*/
如何将两列的组合与其他两列的组合进行比较?
答案 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 )