[英]How to compare two snaps of schema data in SQL?
我有兩個表:
當前排名:
id rank
1 20
2 25
3 26
4 17
上一個_排名
id rank
1 20
2 26
3 18
4 17
5 5
因此,我想獲取Previous_Ranking中所有未出現在Current_Ranking中的記錄(意味着新ID),以及所有它們在Previous_Ranking中的排名與Current_Ranking不同的記錄
因此,預期結果是:
id rank
2 26
3 18
5 5
我怎樣才能做到這一點? 我知道我可以做:
SELECT p.id, p.rank
FROM Previous_Ranking p
LEFT JOIN Current_Ranking c USING (id)
WHERE c.id IS NULL
這應該給我所有新行。 但是我如何從這里繼續?
我正在使用BigQuery,因此可以使用本機SQL來完成。
我只會做:
select p.id, p.rank
from Previous_Ranking p
left join Current_Ranking c
ON p.id = c.id
where p.c is null
OR p.rank != c.rank
您還可以使用EXCEPT
:
select pr.*
from previous_ranking
except distinct
select r.*
from ranking;
還是not exists
:
select pr.*
from previous_ranking pr
where not exists (select 1
from ranking r
where r.id = pr.id and r.rank = pr.rank
);
我發現這兩個版本都比left join
版本更清晰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.