SQL中如何查找一个字段在另一张表中找不到的字段?

如题所述

首先,在SQL中(以SQL Server为例),查询存在一个表而不在另一个表中的数据记录的方法有很多,介绍其中4种:

1、方法一(仅适用单个字段):使用 not in ,比较容易理解,缺点是效率低

如:select A.ID from A where A.ID not in (select ID from B);

2、方法二(适用多个字段匹配):使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID 字段为 null的记录。

如:select A.ID from A left join B on A.ID=B.ID where B.ID is null ;

3、方法三(适用多个字段匹配)

如:select * from B where (select count(1) as num from A where A.ID = B.ID) = 0;

4、方法四(适用多个字段匹配)

如:select * from A where not exists(select 1 from B where A.ID=B.ID)

接着,我们来分析你的SQL语句为什么返回数据不准确的原因。

从你的SQL基础语句来看,你使用了方法一和方法四这两种,两种语法本身都是正确的,但是却没有达到预期的效果,初步分析,问题可能出在gsdj和swdj这两张表的qymc字段的判断比较上。

举个例子:'企业名称'和'企业名称  '这两个字符串看似相同,实际却并不相同,因为第二个“企业名称 ”的后面跟了一个空格字符。就因为这个空格字符导致这个"'企业名称'='企业名称 '"等式不成立。

考虑到你qymc这个字段的类型是字符型,建议你在原有sql基础上做一个微调如下:

select * from gsdj  gs where not exists (select * from swdj sw where rtrim(ltrim(sw.qymc )) )=rtrim(ltrim(gs.qymc )));

其中Ltrim()可以去除左侧空格,rtrim()可以去除右侧的空格,也就是说我们是对去除空格后的企业名称进行比较,排除了空格的干扰。

扩展资料:

在SQL中,对于字符型文本数据,经常需要用到去空格的操作,对ORACLE数据来说可以通过TRIM()函数来简单实现,而SQL SERVER中并没有TRIM()函数,只有LTRIM()和RTRIM()两个函数。

SQL 中使用ltrim()去除左边空格 ,rtrim()去除右边空格 ,没有同时去除左右空格的函数,要去除所有空格可以用replace(字符串,' ',''),将字符串里的空格替换为空。 

例:去除空格函数

declare @temp char(50)

set @temp = ' hello sql '

print ltrim(@temp)     --去除左边空格 

print rtrim(@temp)     --去除右边空格 

print replace(@temp,' ','') --去除字符串里所有空格 

print @temp

>> 输出结果 
hello sql 

hello sql

hellosql

hello sql

温馨提示:内容为网友见解,仅供参考
无其他回答

SQL中如何查找一个字段在另一张表中找不到的字段?
1、方法一(仅适用单个字段):使用 not in ,比较容易理解,缺点是效率低 如:select A.ID from A where A.ID not in (select ID from B);2、方法二(适用多个字段匹配):使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID 字段为 null的记录。如:select A.ID from A...

如何用SQL语句查找在一个表中有记录在而另外一个表中没有记录
如果是关联的话,可以用左连接或右连接 如果不关联的话,就查询公共字段 如 select * from table1 where id not in (select id from table2)

...表A中查询到另外一张表B中没有的记录,SQL语句怎么写?
select * from B where 字段 in (select 字段 from A)查询A中是否在B中存在 字段改成你要查的字段 提取的时候用 select distinct 字段 from A where 字段 not in (select 字段 from B) 插入时候用

SQL通过关联比较两个表,输出这个表中在另一个表中不存在的所有值,怎么...
not in 或者 not exists 一般来说,not exists 效率好一些:假设a , b ,关联字段为a.id = b.id select * from a where not exists(select 1 from b where a.id = b.id)或者:select * from a where id not in(select b.id from b)...

sql 将一个表中的字段与另一个表中的字段进行检索。
select t1.id from t1 ,t2where t1.id = t2.id

SQL如何查询表1中的数据在表2中没有
select * from 表1 a where not exists (select 1 from 表2 where a.字段1=b.字段1 and ……)其中a.字段1=b.字段1 and …… 表达的是两个表用来关联的字段

sqlserver怎么查询一张表中的字段是否包含在另一张表中某个字段?
select distinct b.* from a,b where charindex(a.id,b.id)>0

sql中如何判断某个表中的一个字段的值是不是在另一个表中的某个字段的...
charindex Sql 内置函数,用法如下:select top 5 substring(ContactName,charindex(' ',ContactName)+1,len(ContactName)) as [Last Name] from customers CHARINDEX函数找到First Name和Last Name之间的空格,所以SUBSTRING函数可以分开ContactName列,这样就只有Last Name被选出。在CHARINDEX函数返回的整...

sql判断两组字段中的数字,其中一组在另一组中不存在
select uid from 表名 where uid not in (select distinc upid from 表名)

sql 数据库,一个表中的数据 在另一个表中查找,如果没有则显示结果_百度...
select * from 表1 where 字段 not in (select 字段 from 表2)若是还要考虑到表二有,而表一没有的的情况 select * from 表1,表2 where 字段 not in (select 字段 from 表1 inner join 表2 on 表1.字段=表2.字段)

相似回答
大家正在搜