為什麼在RIGHT JOIN之後,表2中沒有與表1相符的行會被排除?
P粉668146636
2023-08-20 21:18:55
<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>
建議:
可能SQL是依照另一張表的appln_id進行分組。
嘗試這樣做:
目前你的程式碼只取得那些最大值大於0的行,但是那些在另一張表中不存在的行被忽略了,因為它們的值為
NULL
。