Mengapa selepas RIGHT JOIN, baris dalam jadual 2 yang tidak sepadan dengan jadual 1 dikecualikan?
P粉668146636
2023-08-20 21:18:55
<p>Saya perlu menyertai dua jadual: `our_sample` dan `tls207_pers_appln`, yang datang daripada PATSTAT. </p>
<p>`our_sample` mempunyai 4 lajur: appln_id, appln_auth, appln_nr, appln_kind. </p>
<p>`tls207_pers_appln` mempunyai 4 lajur: appln_id, person_id, applt_seq_nr, invt_seq_nr. </p>
<p>`our_sample` mempunyai 2191 baris, sebahagian daripadanya (60 baris) tidak mempunyai data yang sepadan dalam `tls207_pers_appln`. </p>
<p>Oleh kerana saya ingin menyimpan semua appln_id dalam `our_sample` (walaupun mereka tidak mempunyai maklumat yang sepadan dalam `tls207_pers_appln`), saya menggunakan RIGHT JOIN untuk menyertai dua jadual. </p>
<p>Walau bagaimanapun, paparan terjana `t2_tot_in_patent` hanya mempunyai 2096 appln_id. </p>
<p>Ini sebahagiannya disebabkan oleh sekatan yang saya tetapkan (35 paten telah dibuang kerana saya hanya memilih yang mempunyai `HAVING MAX(invt_seq_nr) > 0`, yang boleh diterima). Tetapi ini sepatutnya menghasilkan 2191-35 = 2156 paten. </p>
<p>Sebaliknya, saya mendapat 2096 paten, iaitu:
2191 (dalam sampel_kami) - 60 (id_appln_tiada dalam sampel_kami) - 35 (id_apl dengan invt_seq_nr = 0). </p>
<p>Tetapi tujuan keseluruhan menggunakan RIGHT JOIN ialah 60 paten ini tidak sepatutnya hilang. Kenapa jadi begini? </p>
<pre class="brush:php;toolbar:false;">--Kompilasikan jumlah bilangan pencipta setiap paten: t2_tot_in_patent
DROP VIEW JIKA WUJUD t2_tot_dalam_paten;
BUAT VIEW t2_tot_in_patent AS
PILIH m.appln_id, MAX(invt_seq_nr) AS tot_in_patent
DARIPADA patstat2022a.tls207_pers_appln AS t7
KANAN LUAR SERTAI cecilia.our_sample SEBAGAI m
HIDUP t7.appln_id = m.appln_id
KUMPULAN OLEH appln_id
MEMPUNYAI MAX(invt_seq_nr) >
<p><br /></p>
Cadangan:
Mungkin SQL sedang mengumpulkan mengikut appln_id jadual lain.
Cuba ini:
Pada masa ini kod anda hanya mendapat baris yang nilai maksimumnya lebih besar daripada 0, tetapi baris yang tidak wujud dalam jadual lain diabaikan kerana nilainya ialah
NULL
.