首页  >  问答  >  正文

为什么在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 天前386

全部回复(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
  • 取消回复