首頁  >  問答  >  主體

為什麼在RIGHT JOIN之後,表2中沒有與表1相符的行會被排除?

<p>我需要連接兩個表:`our_sample`和`tls207_pers_appln`,它們來自於PATSTAT。 </p> <p>`our_sample`有4列:appln_id, appln_auth, appln_nr, appln_kind。 </p> <p>`tls207_pers_appln`有4列:appln_id, person_id, applt_seq_nr, invt_seq_nr。 </p> <p>`our_sample`有2191行,其中有一些行(60行)在`tls207_pers_appln`中沒有對應的資料。 </p> <p>因為我想要保留`our_sample`中的所有appln_id(即使它們在`tls207_pers_appln`中沒有匹配的信息),所以我使用了RIGHT JOIN來連接這兩個表。 </p> <p>然而,產生的視圖`t2_tot_in_patent`只有2096個appln_id。 </p> <p>這部分是由於我設定的限制所導致的(35個專利被丟棄,因為我只選擇了那些`HAVING MAX(invt_seq_nr) > 0`的專利,這是可以接受的)。但這應該會得到2191-35 = 2156個專利。 </p> <p>相反,我得到了2096個專利,即: 2191(在our_sample中)- 60(在our_sample中缺少的appln_id)- 35(invt_seq_nr = 0的appln_id)。 </p> <p>但是使用RIGHT JOIN的整個目的是不應該失去這60個專利。為什麼會這樣呢? </p> <pre class="brush:php;toolbar:false;">-- 編譯每個專利的發明者總數:t2_tot_in_patent DROP VIEW IF EXISTS t2_tot_in_patent; CREATE VIEW t2_tot_in_patent AS SELECT m.appln_id, MAX(invt_seq_nr) AS tot_in_patent FROM patstat2022a.tls207_pers_appln AS t7 RIGHT OUTER JOIN cecilia.our_sample AS m ON t7.appln_id = m.appln_id GROUP BY appln_id HAVING MAX(invt_seq_nr) > 0</pre> <p><br /></p>
P粉668146636P粉668146636426 天前387

全部回覆(1)我來回復

  • P粉350036783

    P粉3500367832023-08-21 09:44:28

    建議:

    GROUP BY m.appln_id

    可能SQL是依照另一張表的appln_id進行分組。

    嘗試這樣做:

    HAVING MAX(invt_seq_nr) > 0 OR MAX(invt_seq_nr) IS NULL

    目前你的程式碼只取得那些最大值大於0的行,但是那些在另一張表中不存在的行被忽略了,因為它們的值為NULL

    回覆
    0
  • 取消回覆