如何用SQL对两个文件做比较

如何用SQL对两个文件做比较,第1张

比较两个数据库,可以用工具,比如toad等,也可以自己写存储过程来实现,偶介绍一个用sql来核对表结构是否一致,以此类推,大家可以写出对比索引是否一致,对比约束是否一致的sql,该sql的缺点就是只能查出差异,却不知是那个表引起的:

select

case

when

a.cnt

=

b.cnt

then

'两个库结构一致'

when

a.cnt

<>

b.cnt

then

'两个库结构不一致'

end

from

(select

count(*)

as

cnt

from

dba_tab_columns

t1,

dba_tab_columns@lnk_db2

t2

where

t1.owner

=

'TAOBAO'

and

t1.owner

=

t2.owner

and

t1.table_name

=

t2.table_name

and

t1.column_name

=

t2.column_name

and

t1.data_type

=

t2.data_type

and

t1.data_length

=

t2.data_length

and

t1.nullable

=

t2.nullable

and

nvl(t1.data_precision,

0)

=

nvl(t2.data_precision,

0)

and

nvl(t1.data_scale,

0)

=

nvl(t2.data_scale,

0))

a,

(select

count(*)

as

cnt

from

dba_tab_columns

where

owner

=

'TAOBAO')

b

SQL语句对比两张表的数据并筛选出数据不同的公式如下:

select A.* from A, B

where A.A1=B.B1 -- 相同主键,做表连接.

and A.A2 <>B.B2 -- 条件:A2不等于B2.

and A.A3 <>B.B3 -- 条件:A3不等于B3.

知识延展:

sql 语句是对数据库进行 *** 作的一种语言。

结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

问题补充:

select N'ab',N'ab',N'bc',N'bc',N'abc',N'ab',N'ab',N'ac',N'abc',N'ab'

select N'ab',N'ab',N'bc',N'bc',N'abc',N'ab',N'ab',N'ac',N'abc',N'ab'

微软专家吴熹

能否解释一下上面的语句是什么意思,因为我要比较几万条记录,不会要这样每条都写入程序吧!

A表中有几万条记录,B表中有800条记录,A表中的每条记录和B表中的每条记录进行比较,A表的每条记录和B表800条记录比较后把比较结果写到A表记录新增的800条字段里进行存储。

---------------------------------

以上脚本是生成测试数据,加上N''--用生成nvarchar符号,有特殊字符时可加上。

两个表要通过主健关连 加上条件 where a.ID=b.ID,不加条件时,需要保证A表只有一条数据.

没主健时多对多关系会产生笛卡尔结果集

-->-->(Roy)生成测试数据

declare @A table([1] nvarchar(1),[2] nvarchar(1),[3] nvarchar(1),[4] nvarchar(1),[5] nvarchar(1),[6] nvarchar(1),[7] nvarchar(1),[8] nvarchar(1),[9] nvarchar(1),[10] nvarchar(1))

Insert @A

select N'a',N'c',N'a',N'b',N'a',N'b',N'c',N'c',N'a',N'b'

-->-->(Roy)生成测试数据

declare @B table([1] nvarchar(2),[2] nvarchar(2),[3] nvarchar(2),[4] nvarchar(2),[5] nvarchar(3),[6] nvarchar(2),[7] nvarchar(2),[8] nvarchar(2),[9] nvarchar(3),[10] nvarchar(2))

Insert @B

select N'ab',N'ab',N'bc',N'bc',N'abc',N'ab',N'ab',N'ac',N'abc',N'ab'

Select a.*,

case when b.[1] like '%'+a.[1]+'%' then 1 else 0 end+

case when b.[2] like '%'+a.[2]+'%' then 1 else 0 end+

case when b.[3] like '%'+a.[3]+'%' then 1 else 0 end+

case when b.[4] like '%'+a.[4]+'%' then 1 else 0 end+

case when b.[5] like '%'+a.[5]+'%' then 1 else 0 end+

case when b.[6] like '%'+a.[6]+'%' then 1 else 0 end+

case when b.[7] like '%'+a.[7]+'%' then 1 else 0 end+

case when b.[8] like '%'+a.[8]+'%' then 1 else 0 end+

case when b.[9] like '%'+a.[9]+'%' then 1 else 0 end+

case when b.[10] like '%'+a.[10]+'%' then 1 else 0 end as 新列

from @A a,@B b

(1 行受影响)

12345678910 新列

---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -----------

acababccab7

(1 行受影响)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6694671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存