RIGHT JOIN の後、テーブル 1 と一致しないテーブル 2 の行が除外されるのはなぜですか?
P粉668146636
2023-08-20 21:18:55
<p>PATSTAT から取得した 2 つのテーブル `our_sample` と `tls207_pers_appln` を結合する必要があります。 </p>
<p>`our_sample` には、appln_id、appln_auth、appln_nr、appln_kind の 4 つの列があります。 </p>
<p>`tls207_pers_appln` には、appln_id、person_id、applt_seq_nr、invt_seq_nr の 4 つの列があります。 </p>
<p>`our_sample` には 2191 行があり、その一部 (60 行) には `tls207_pers_appln` に対応するデータがありません。 </p>
<p>すべての appln_id を (`tls207_pers_appln` に一致する情報がない場合でも) `our_sample` に保持したかったため、RIGHT JOIN を使用して 2 つのテーブルを結合しました。 </p>
<p>ただし、生成されたビュー `t2_tot_in_patent` には 2096 個の appln_id しかありません。 </p>
<p>これは部分的には私が設定した制限によるものです (受け入れ可能な「HAVING MAX(invt_seq_nr) > 0」を持つ特許のみを選択したため、35 件の特許が破棄されました)。しかし、これにより 2191-35 = 2156 件の特許が取得されるはずです。 </p>
<p>代わりに、2,096 件の特許を取得しました。
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
存在する場合はビューをドロップ t2_tot_in_patent;
ビューの作成 t2_tot_in_patent AS
SELECT m.appln_id, MAX(invt_seq_nr) AS tot_in_patent
patstat2022a.tls207_pers_appln AS t7 から
RIGHT OUTER JOIN cecilia.our_sample AS m
オン t7.appln_id = m.appln_id
appln_id によるグループ化
MAX(invt_seq_nr) > 0 を有する
<p><br /></p>
###提案:### リーリー
SQL が別のテーブルの appln_id に従ってグループ化されている可能性があります。
### これを試して: ### リーリー現在、コードは最大値が 0 より大きい行のみをフェッチしますが、他のテーブルに存在しない行は値が
NULLであるため無視されます。