为什么在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
。