Warum werden nach RIGHT JOIN Zeilen in Tabelle 2, die nicht mit Tabelle 1 übereinstimmen, ausgeschlossen?
P粉668146636
2023-08-20 21:18:55
<p>Ich muss zwei Tabellen verknüpfen: „our_sample“ und „tls207_pers_appln“, die von PATSTAT stammen. </p>
<p>`our_sample` hat 4 Spalten: appln_id, appln_auth, appln_nr, appln_kind. </p>
<p>`tls207_pers_appln` hat 4 Spalten: appln_id, person_id, applt_seq_nr, invt_seq_nr. </p>
<p>`our_sample` hat 2191 Zeilen, von denen einige (60 Zeilen) keine entsprechenden Daten in `tls207_pers_appln` haben. </p>
<p>Da ich alle appln_ids in „our_sample“ behalten wollte (auch wenn sie keine passenden Informationen in „tls207_pers_appln“ haben), habe ich einen RIGHT JOIN verwendet, um die beiden Tabellen zu verbinden. </p>
<p>Die generierte Ansicht „t2_tot_in_patent“ hat jedoch nur 2096 appln_ids. </p>
<p>Dies liegt teilweise an den von mir festgelegten Einschränkungen (35 Patente wurden verworfen, weil ich nur diejenigen mit „HAVING MAX(invt_seq_nr) > 0“ ausgewählt habe, was akzeptabel ist). Dies dürfte aber zu 2191-35 = 2156 Patenten führen. </p>
<p>Stattdessen habe ich 2096 Patente erhalten, nämlich:
2191 (in unserem_Beispiel) – 60 (fehlende appln_id in unserem_Beispiel) – 35 (appln_id mit invt_seq_nr = 0). </p>
<p>Aber der ganze Zweck der Verwendung von RIGHT JOIN besteht darin, dass diese 60 Patente nicht verloren gehen. Warum ist das so? </p>
<pre class="brush:php;toolbar:false;">--Stellen Sie die Gesamtzahl der Erfinder pro Patent zusammen: t2_tot_in_patent
DROP VIEW IF EXISTS t2_tot_in_patent;
ANSICHT t2_tot_in_patent AS ERSTELLEN
SELECT m.appln_id, MAX(invt_seq_nr) AS tot_in_patent
VON patstat2022a.tls207_pers_appln AS t7
RIGHT OUTER JOIN cecilia.our_sample AS m
ON t7.appln_id = m.appln_id
GRUPPE NACH appln_id
HAVING MAX(invt_seq_nr) >
<p><br /></p>
建议:
可能SQL是按照另一张表的appln_id进行分组。
尝试这样做:
目前你的代码只获取那些最大值大于0的行,但是那些在另一张表中不存在的行被忽略了,因为它们的值为
NULL
。