Pourquoi après RIGHT JOIN, les lignes du tableau 2 qui ne correspondent pas au tableau 1 sont exclues ?
P粉668146636
2023-08-20 21:18:55
<p>Je dois joindre deux tables : `our_sample` et `tls207_pers_appln`, qui proviennent de PATSTAT. </p>
<p>`our_sample` comporte 4 colonnes : appln_id, appln_auth, appln_nr, appln_kind. </p>
<p>`tls207_pers_appln` comporte 4 colonnes : appln_id, person_id, applt_seq_nr, invt_seq_nr. </p>
<p>`our_sample` comporte 2 191 lignes, dont certaines (60 lignes) n'ont aucune donnée correspondante dans `tls207_pers_appln`. </p>
<p>Parce que je voulais conserver tous les appln_ids dans `our_sample` (même s'ils n'ont aucune information correspondante dans `tls207_pers_appln`), j'ai utilisé un RIGHT JOIN pour joindre les deux tables. </p>
<p>Cependant, la vue générée `t2_tot_in_patent` n'a que 2096 appln_ids. </p>
<p>Cela est en partie dû aux restrictions que j'ai définies (35 brevets ont été rejetés car je n'ai sélectionné que ceux avec `HAVING MAX(invt_seq_nr) > 0`, ce qui est acceptable). Mais cela devrait donner 2191-35 = 2156 brevets. </p>
<p>Au lieu de cela, j'ai obtenu 2096 brevets, à savoir :
2191 (dans our_sample) - 60 (appln_id manquant dans our_sample) - 35 (appln_id avec invt_seq_nr = 0). </p>
<p>Mais le but même de l'utilisation de RIGHT JOIN est que ces 60 brevets ne doivent pas être perdus. Pourquoi cela est-il ainsi? </p>
<pre class="brush:php;toolbar:false;">--Compilez le nombre total d'inventeurs par brevet : t2_tot_in_patent
VUE DROP SI EXISTE t2_tot_in_patent ;
CRÉER UNE VUE t2_tot_in_patent AS
SELECT m.appln_id, MAX(invt_seq_nr) AS tot_in_patent
DE patstat2022a.tls207_pers_appln AS t7
JOINTURE EXTÉRIEURE DROITE cecilia.our_sample AS m
SUR t7.appln_id = m.appln_id
GROUPER PAR appln_id
AVOIR MAX(invt_seq_nr) > 0</pre>
<p><br /></p>
Recommandation :
Peut-être que le SQL regroupe selon l'appln_id d'une autre table.
Essayez ceci :
Actuellement, votre code n'obtient que les lignes dont la valeur maximale est supérieure à 0, mais les lignes qui n'existent pas dans l'autre tableau sont ignorées car leurs valeurs sont
NULL
.