当前位置:首页 » 编程语言 » 比对数据的sql
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

比对数据的sql

发布时间: 2022-06-02 02:47:39

1. sql语句:对比两张表的数据并筛选出数据不同的

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.

2. SQL如何对比两张表的数据

insert
into
tablea
select
*
from
tablea
where
not
exists
(selelct
'1'
from
tableb
where
tablea.serverid
=
serverid
and
tablea.driverid
=
driverid
and
tablea.driversize
=
driversize)
update
tablea
set
tablea.driversize
=
tablea.driversize
from
tablea
,tableb
where
tablea.serverid
=
serverid
and
tablea.driverid
=
driverid
如果你以tableb为准的话,你最好在tableb上加个触发器

3. 用sql语句如何将两张表中的一列数据进行比对。

你好!

  1. 先获取不重复的ID,即x、y表的不重复并集,观察x、y表结构类似,通过union进行排重即可。

  2. 使用第一步获取的数据进行左链接x、y表的扩展表(第3步)。

  3. 分别对x、y表进行分组并合计,针对图片中y表中ID为A的记录出现多次,最后显示为ID为A的盘点数量为2,这样的数据进行处理,以方便最后显示。

  4. 通过(库存数-盘点数)得到比对字段值。

SELECT
t.ID,
IFNULL(t.`库存数量`,0)`库存数量`,
IFNULL(t.`盘点数量`,0)`盘点数量`,
(
IFNULL(t.`库存数量`,0)-IFNULL(t.`盘点数量`,0)
)`比对`
FROM
(
SELECT
a.IDID,
p1.`库存数量`,
p2.`盘点数量`
FROM
(
SELECT
ID
FROM
x
UNION
SELECT
ID
FROM
y
)a
LEFTJOIN(
SELECT
ID,
sum(`库存数量`)`库存数量`
FROM
x
GROUPBY
ID
)p1ONa.id=p1.id
LEFTJOIN(
SELECT
ID,
sum(`盘点数量`)`盘点数量`
FROM
y
GROUPBY
ID
)p2ONa.id=p2.id
)t
ORDERBY
ID

希望对你有帮助!

4. SQL如何对2个表的数据进行对比

a表与b表通过哪个字段可以关联起来,关系是1对多还是多对多

select * from tablesA a
left join tablesB b on a.xx=b.xx
where a.xx1=b.xx1

类似这种

5. sql比对两个表中的差异数据比较的sql语句

select
base.name,base.year
,a.成绩as[a表成绩]
,b.成绩as[b表成绩]
,case
whena.成绩isnullthen'a表中不存在'
whenb.成绩isnullthen'b表中不存在'
whena.成绩=b.成绩then'成功'
else'差异'endas比较结果
from(
selectname,yearfromtb_a
union
selectname,yearfromtb_b
)asbase
leftjointb_aasaona.name=base.nameanda.year=base.year
leftjointb_basbonb.name=base.nameandb.year=base.year

6. sql 中如何比较数据,并返回一个结果,简单语句能实现嘛,存储过程能实现嘛,详细如下

1.
1条sql语句能写,只是分支太多,语句效率估计会慢死。

(1)三表关联(新粮表,化验单,检验单,根据grainID关联),组成一个新的有别名的临时表。
(select语句) as XX
根据grainID的相同的关系,找到你要的数据,比如新粮表的grainType,检验单的 testResult等。
(2)上面的XX临时表与制度表关联(根据grainType)
按照你的说法,项目一共有,虫蚀,病斑,破碎,生芽,发霉,损伤六项,必须全部合格,才显示testResult,否则显示“某某不合格”,那么就存在一个问题,如果有两项或者三项不合格,那么是不是两项或者三项都要显示,如果这样的话,那么case when的分支就要写的非常多,是一个组合的关系,有一项不合格的有6个,有两项不合格的有15个,有三项不合格的有30个,四项15种,5项6种,6项1种,再加上合格的1种情况,加起来case when 要写1+6+15+20+15+6+1=64种情况,那么这条语句会很长,而且运行起来真的很慢。
如果只是每次找出一个就行,那么就可能会出现这次是虫蚀不合格,下次是病斑不合格这种可能,这样也不太好,个人觉得最好一次说明白。
2.存储过程怎么办
存储过程自己实现的话,那么和上面的一条语句差不多,也是比较麻烦的,毕竟他要返回所有可能的结果,然后反馈给前台,这样的话,其实和一条语句差不太多。

3.个人认为比较靠谱的办法
也是存储过程的,但是并不是用存储过程输出全部结果,只输出对比结果,比如(仅为举例)输出一个结果集(010100),那么前台就可以解读这个字符串为“病斑生芽不合格”,这样速度就会快很多。

7. sql比对新数据

你可以做一个视图,把两张表进行比较,我给你写个例子:
比较table1有而talbe2没有的(对xm来说):select
*
from
table1
left
join
table2
on
table1.xm=table2.xm
where
table2.xm
is
null
一执行这个视图,就可以把结果查询出来了。
要是想比较table2有而talbe1没有的(对xm来说),把上面的语句中的table1和table2的位置互调一下就可以了。
还有一个方法,就要在talbe2做一个触发器,一旦有新增记录,就立即执行代码,调用上面的语句,把结果写到某个表中,
insert
输出表(xm)
select
xm
from
table2
left
join
table1
on
table1.xm=table2.xm
where
table1.xm
is
null
这样就把talbe2多出来的记录全插入到输出表了。