求SQL语句:查找出表一中的所有记录在表二中没有匹配的显示出来。

有两个表如下:

表格一
编码A
304520
1302
6478902
04680000

表格二
编码B
30.4520
13.0200
64.789 02

要求:查找出表一中的编码在表二的编码中不匹配的。
注明:
(1)表一中的编码A为全数字组成的字符串,表二中的编码B为‘数字+小数点+空格+汉字’组成的字符串。
(2)表一的编码A与表二的编码B去除“小数点/空格/汉字”后前几位相同的则算匹配。
比如:表一编码A的1302 与表二编码B的13.0200是前几位相同,算是匹配的,但要找出不匹配的。

按要求查询结果应为:
04680000 (表一中的编码A只有这一条在表二编码B中不匹配)

求SQL语句?(最好能一次查询出来,不要用临时表)

select * from 表格一 A
where 1 = 1 and not exists
(select C.B from (
select REPLACE(REPLACE(编码B, '.', ''), ' ', '') as B from 表格二) C
where PATINDEX('%'+A.编码A+'%', C.B) > 0)

其中用到了REPLACE函数把一些不要的字符给去掉,PATINDEX是用来判断一个字符串中是否包含了另一个字符串,并返回一个INT类型的数据!!

希望对你有帮助!追问

这个查询效率高一点。但感觉查询结果不完全正确。

我了解了下PATINDEX函数,在尝试改进查询语句,谢谢!

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-17
select * from T1 where A not in
(select nvl(substr(REGEXP_SUBSTR(B,'[0-9]+')||REGEXP_SUBSTR(B,'[0-9]+',1,2)||
REGEXP_SUBSTR(B,'[0-9]+',1,3)||REGEXP_SUBSTR(B,'[0-9]+',1,4),1,length(A)),' ')
from T2);
该语句只允许编码B有4段数字。
例如:64.789a02是3段数字,中间.和a相隔;
64.789a02b01是4段数字,中间.、a和b相隔。
如果5段,则增加REGEXP_SUBSTR(B,'[0-9]+',1,5)
如果6段,则增加REGEXP_SUBSTR(B,'[0-9]+',1,6),一次类推。
第2个回答  2012-10-17
能把表里的数据整成这样服了你了,都是字符串转来转去的,给你些思路吧~~不过效率不会高的

select * from 表1 a where not exists(
select * from (
select replace(cast(编码B as nvarchar(20)),'.','') as 编码B from 表2
) x where cast(replace(x.编码B,cast(a.编码A as nvarchar(20)),'0') as int)=0
)
第3个回答  2012-10-17
如果还有汉字应该直接查不出来,如果只有小数点和空格的话可以先将小数点和空格替换掉。

求SQL语句:查找出表一中的所有记录在表二中没有匹配的显示出来。
select * from 表格一 A where 1 = 1 and not exists (select C.B from (select REPLACE(REPLACE(编码B, '.', ''), ' ', '') as B from 表格二) C where PATINDEX('%'+A.编码A+'%', C.B) > 0)其中用到了REPLACE函数把一些不要的字符给去掉,PATINDEX是用来判断一个字符串...

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

sql如何自动判断表1中的值是否在表2中出现?
select 表1.序号,表1.姓名,(case isnull(表2.姓名,'否') when '否' then '否' else '是' end) 是否标记 from 表1 left join 表2 on 表1.姓名=表2.姓名试试这个

...查询语句查询两个表的数据是否一致并且把不一致的数据显示出来...
select * from a a where not exists(select * from b b where a.name=b.name)查看表结构 SQL>DESC emp;查询所有列 SQL>SELECT * FROM emp;查询指定列 SQL>SELECT empmo, ename, mgr FROM emp;SQL>SELECT DISTINCT mgr FROM emp; 只显示结果不同的项 查询指定行 SQL>SELECT * FROM emp ...

SQL:查找出一张表里两条记录不相同的字段项和内容。在线等。
BY groupidHAVING COUNT(groupid)>1))t1pivot(max(id1)for operation in([3],[4]))as pvt结果:id112我上面写的就是查出id1不同的,再行列转换 如果你要id2不同的,将其中的id1替换成id1就可以了 具体的过程,你可以分别写出id1,id2的如上的查询数据,然后用union all合并就可以了 ...

sql 语句 排除表1中在表2的数据
简单:表一 (table1) 的 1,2,3,4,5,6 是放在字段 number 中的 表二 (table2) 的 2,3,4,5,7,8,9 也是放在字段 number 中的 Select number from table1,table2 where table1.nember <> table2.number

查询一个表中所有id字段在另一个表中对应值的SQL语句怎么写?
子查询即可 SELECT (SELECT name FROM TA WHERE id = TB.id1) AS id1,(SELECT name FROM TA WHERE id = TB.id2) AS id2 FROM TB

SQL中如何查询A表中的数据有部分存在B表中并显示出来
SQL中查询A表中的数据有部分存在B表中并显示出来,可以参考下面几种方法:1、select * from B表 where item_no in (select 条码 from A表)2、select * from A表,B表 where A表.条码=B表.item_no

sql语句查询,根据一个表中一个列,该列在两个不同条件同时满足的查询结果...
1、在计算机中,打开Foxtable软件,新建一个表格,比如学生的评价成绩表,并输入数据,如下图所示。2、接着,鼠标左键单击选择菜单下的【杂项】,如下图所示。3、 然后,在菜单栏目中,鼠标左键单击【SQL查询】,如下图所示。4、接着,在【SQL查询】窗口上,选择数据源,如下图所示。5、然后,在...

sql语句查询A表中某一周期内,对比B表缺少的记录,求具体语句,谢谢
用 not in select * from pub_users where user_id not in (select user_id from pub_online_hist where 时间在时间段内)

相似回答