cari

Rumah  >  Soal Jawab  >  teks badan

Mengapa selepas RIGHT JOIN, baris dalam jadual 2 yang tidak sepadan dengan jadual 1 dikecualikan?

<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>
P粉668146636P粉668146636543 hari yang lalu478

membalas semua(1)saya akan balas

  • P粉350036783

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

    Cadangan:

    GROUP BY m.appln_id

    Mungkin SQL sedang mengumpulkan mengikut appln_id jadual lain.

    Cuba ini:

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

    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.

    balas
    0
  • Batalbalas