當前位置:首頁 » 編程語言 » 比對數據的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多出來的記錄全插入到輸出表了。