recherche

Maison  >  Questions et réponses  >  le corps du texte

Pourquoi après RIGHT JOIN, les lignes du tableau 2 qui ne correspondent pas au tableau 1 sont exclues ?

<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>
P粉668146636P粉668146636459 Il y a quelques jours413

répondre à tous(1)je répondrai

  • P粉350036783

    P粉3500367832023-08-21 09:44:28

    Recommandation :

    GROUP BY m.appln_id

    Peut-être que le SQL regroupe selon l'appln_id d'une autre table.

    Essayez ceci :

    HAVING MAX(invt_seq_nr) > 0 OR MAX(invt_seq_nr) IS NULL

    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.

    répondre
    0
  • Annulerrépondre