簡體   English   中英

如何在SQL中比較架構數據的兩個快照?

[英]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
    c.id IS NULL OR p.rank <> c.rank;

在此處輸入圖片說明

注意: RANK是許多版本的SQL中的保留關鍵字(盡管在BigQuery中顯然不是)。 因此,您可能要避免使用RANK作為列和表的名稱。

我只會做:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM