怎样用Sql语句表格判断语句一张表中的两条数据相同

SQLSERVER中如何快速比较两张表的不一样
不知不觉要写2014年的最后一篇博文了~
一般来说,如何检测两张表的内容是否一致,体现在复制的时候发布端和订阅端的两端的数据上面
我这里罗列了一些如何从数据库层面来解决此类问题的方法
第一步当然就是检查记录数是否一致,否则不用想其他方法了~这里我们用两张表t1_old,t1_new来演示
方法一:老老实实看表结构和表记录数,弊端是根本看不到两张表的数据是否一致,只是看到表结构和记录数是否一致
--表结构:
CREATE TABLE t1_old (
id int NOT NULL,
log_time DATETIME DEFAULT ''
CREATE TABLE t1_new (
id int NOT NULL,
log_time DATETIME DEFAULT ''
--两表的记录数都为100条。
select count(*) from t1_
select count(*) from t1_
方法二:加法去重 union 运算符排除重复的,但是有bug,在某些情形下不能简单表示结果集一致,相当于无效
由于Union 本身具备把上下两条连接的记录做唯一性排序,所以这样检测起来比较简单
INSERT INTO [dbo].[t1_new]
( [id],[log_time] )
VALUES(1,''),(3,''),(4,'')
INSERT INTO [dbo].[t1_old]
( [id],[log_time] )
VALUES(1,''),(2,''),(3,'')
SELECT * FROM [dbo].[t1_new]
SELECT * FROM [dbo].[t1_old]
查询出来的结果是4
方法三:EXCEPT &减法归零
[dbo].[t1_new]
[dbo].[t1_old]
[dbo].[t1_old]
[dbo].[t1_new]
SELECT * FROM [dbo].[t1_new]
SELECT * FROM [dbo].[t1_old]
这里检测出来结果不对,那么就直接给出不一致的结论
方法四:用全表INNER JOIN,这个也是最烂的做法,当然这里指的是在表记录数超级多的情况下
DECLARE @t1_newcount BIGINT
DECLARE @count BIGINT
@t1_newcount = COUNT(*)
@count = COUNT(*)
[t1_old] AS a
INNER JOIN [t1_new] AS b ON [b].[id] = [a].[id]
AND [b].[log_time] = [a].[log_time] --如果表中还有其他字段的自行添加
PRINT @count
PRINT @t1_newcount
IF ( @count = @t1_newcount )
'not equal'
方法五:借助SQLSERVER自带的tablediff工具,当初微软制作这个工具的目的就是用于比较复制中发布表和订阅表的数据一致
identical是相等的意思
方法六:借助发布端的验证订阅功能,验证订阅端跟发布端的数据是否一致
方法七:用checksum校验,比较两张表里的内容的checksum值是否一致
但是这种方法也只局限于两表结构一摸一样
我把[t1_new]表的数据复制到一张新的表以便进行比较
SELECT * FROM [dbo].[t1_new]
SELECT * FROM [dbo].[t1_newreplica]
SELECT SUM(CHECKSUM(*)) AS checksumvalue FROM [dbo].[t1_old]
SELECT SUM(CHECKSUM(*)) AS checksumvalue FROM [dbo].[t1_new]
SELECT SUM(CHECKSUM(*)) AS checksumvalue FROM [dbo].[t1_newreplica]
从上面几种数据库提供的方法来看,用EXCEPT减法来归零相对来说比较可靠,其他的方法比较适合在特定的情形下来检测
如有不对的地方,欢迎大家拍砖o(&_&)o&
本文版权归作者所有,未经作者同意不得转载。
阅读(...) 评论()如何写个SQL语句查询一个字段里是否有重复记录如果有只读取其中一条记录
问题:有张表中有一个主键id,有一个字段item_id是重复的,我想读取出来的记录item_id没有重复的,随即取其中一条就行。
解决方法:
select * from
你的表名 a where id=(select min(id) from 你的表名 where
item_id=a.item_id)
思想是在查询之前先把数据库表中的第一行复制到sid里在去,然后让sid和下面的每一行进行比较
取所有相同的行的最小的一下,也可以取最大的,结果是一样的。这样让所有的行都比较不就得到不重复的数据了吗。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。sql中如何在同一个表中列出两个列不重复的数据
- 蓝蓝的天 - ITeye博客
在一个表tt中有两列 (非主键)aa,bb 。存在如下的数据
01001,机组有功功率
02001,主汽压力
01001,机组有功功率
要获得的查询结果为:
01001,机组有功功率
02001,主汽压力
使用的sql语句为:select min(aa) as aa,bb from tt group by aa,bb
海滩拾贝壳的小孩
浏览: 15905 次
来自: 北京

我要回帖

更多关于 sql语句合并两张表 的文章

 

随机推荐