【问题标题】:Compare combination of two column with combination of other two in SQL比较 SQL 中两列的组合与其他两列的组合
【发布时间】:2015-02-22 09:34:56
【问题描述】:
我有 2 个表,tbl_NameCode 和 tbl_Bkp 都有列 ID 和 Name。
我必须从 tbl_NameCode 中选择不在 tbl_bkp 中的记录。
SELECT * FROM tbl_Bkp
WHERE ? */COMBINATION OF ID,Name NOT IN (SELECT COMBINATION OF ID,NAME FROM tbl_NameCode )*/
如何比较两列的组合与其他两列的组合?
【问题讨论】:
标签:
sql
sql-server
sql-server-2008
select
join
【解决方案1】:
如果没有错,Except 运算符应该可以工作。
SELECT Id1,Id2,Id3,..Name FROM tbl_Bkp
Except
select Id1,Id2,Id3,..Name from tbl_NameCode
【解决方案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;
【解决方案3】:
你可以连接字符串。如果您的 ID 是整数,则将其转换为 nvcrchar(50)
SELECT * FROM tbl_Bkp
WHERE ID+''+Name NOT IN (SELECT cast(ID as nvarchar(50))+''+NAME FROM tbl_NameCode
【解决方案4】:
您也可以尝试以下方法:
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
【解决方案5】:
使用 SQL EXISTS 将为您进行很好的比较。并返回不同的结果。 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 )