執行自連接后,我對表的輸出感到困惑例如:這是我的表
select * from Logins
id login_date
7 2020-05-30
1 2020-05-30
7 2020-05-31
7 2020-05-01
7 2020-05-02
7 2020-05-02
7 2020-05-03
1 2020-05-07
7 2020-05-10
以及運行查詢后的輸出
select * from Logins a join Logins b on a.id = b.id
is :
id login_date id login_date
7 2020-05-30 7 2020-05-30
7 2020-05-31 7 2020-05-30
7 2020-05-01 7 2020-05-30
7 2020-05-02 7 2020-05-30
7 2020-05-02 7 2020-05-30
7 2020-05-03 7 2020-05-30
7 2020-05-10 7 2020-05-30
1 2020-05-30 1 2020-05-30
1 2020-05-07 1 2020-05-30
7 2020-05-30 7 2020-05-31
7 2020-05-31 7 2020-05-31
7 2020-05-01 7 2020-05-31
7 2020-05-02 7 2020-05-31
7 2020-05-02 7 2020-05-31
7 2020-05-03 7 2020-05-31
7 2020-05-10 7 2020-05-31
7 2020-05-30 7 2020-05-01
7 2020-05-31 7 2020-05-01
7 2020-05-01 7 2020-05-01
7 2020-05-02 7 2020-05-01
7 2020-05-02 7 2020-05-01
7 2020-05-03 7 2020-05-01
7 2020-05-10 7 2020-05-01
7 2020-05-30 7 2020-05-02
7 2020-05-31 7 2020-05-02
7 2020-05-01 7 2020-05-02
7 2020-05-02 7 2020-05-02
7 2020-05-02 7 2020-05-02
7 2020-05-03 7 2020-05-02
7 2020-05-10 7 2020-05-02
7 2020-05-30 7 2020-05-02
7 2020-05-31 7 2020-05-02
7 2020-05-01 7 2020-05-02
7 2020-05-02 7 2020-05-02
7 2020-05-02 7 2020-05-02
7 2020-05-03 7 2020-05-02
7 2020-05-10 7 2020-05-02
7 2020-05-30 7 2020-05-03
7 2020-05-31 7 2020-05-03
7 2020-05-01 7 2020-05-03
7 2020-05-02 7 2020-05-03
7 2020-05-02 7 2020-05-03
7 2020-05-03 7 2020-05-03
7 2020-05-10 7 2020-05-03
1 2020-05-30 1 2020-05-07
1 2020-05-07 1 2020-05-07
7 2020-05-30 7 2020-05-10
7 2020-05-31 7 2020-05-10
7 2020-05-01 7 2020-05-10
7 2020-05-02 7 2020-05-10
7 2020-05-02 7 2020-05-10
7 2020-05-03 7 2020-05-10
7 2020-05-10 7 2020-05-10
53 行。
為什么自連接將表 b 的日期值賦予 a 中的每個日期值?它不應該只是像
id login_date id login_date
7 5/30/2020 7 5/30/2020
1 5/30/2020 1 5/30/2020
7 5/31/2020 7 5/31/2020
7 5/1/2020 7 5/1/2020
7 5/2/2020 7 5/2/2020
7 5/2/2020 7 5/2/2020
7 5/3/2020 7 5/3/2020
1 5/7/2020 1 5/7/2020
7 5/10/2020 7 5/10/2020
其中表 b 是副本或只是另一個表,如表 a。我想象 self join 只是創建一個表副本并將其與自身連接。
我剛剛開始了解 sql,這個基本的連接函式讓我感到困惑,或者它可能是我在這里遺漏的非常愚蠢的東西。請幫忙。
uj5u.com熱心網友回復:
表中的 ID 不是唯一的。因此,具有某個 ID 的每一行都與連接表中具有該 ID 的所有行相匹配。例如,1表中有兩行帶有 ID 。它們中的每一個都與連接表中的每一個匹配,總共有 2*2=4 行。
uj5u.com熱心網友回復:
這就是連接的作業原理:對于第一個值中的每一行,回傳第二個表中具有相應連接鍵的所有行。所以,id join key 不是唯一的,join 重復記錄。你有7行id = 7,它給你7*7=49行id=7和2行id=1結果2x2=4行id=1,完全53行。
uj5u.com熱心網友回復:
要得到這個結果:
id login_date id login_date
7 5/30/2020 7 5/30/2020
1 5/30/2020 1 5/30/2020
7 5/31/2020 7 5/31/2020
7 5/1/2020 7 5/1/2020
7 5/2/2020 7 5/2/2020
7 5/2/2020 7 5/2/2020
7 5/3/2020 7 5/3/2020
1 5/7/2020 1 5/7/2020
7 5/10/2020 7 5/10/2020
試試這個代碼,
select * from Logins a
join Logins b
on a.id = b.id AND a.login_date = b.login_date.
在此查詢中,您將比較兩列,以便獲得預期結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/383809.html
下一篇:使用Case陳述句分組不計零
