RIGHT JOIN 후에 테이블 1과 일치하지 않는 테이블 2의 행이 제외되는 이유는 무엇입니까?
P粉668146636
2023-08-20 21:18:55
<p>PATSTAT에서 가져온 `our_sample`과 `tls207_pers_appln`이라는 두 테이블을 조인해야 합니다. </p>
<p>`our_sample`에는 appln_id, appln_auth, appln_nr, appln_kind의 4개 열이 있습니다. </p>
<p>`tls207_pers_appln`에는 appln_id, person_id, applt_seq_nr, invt_seq_nr의 4개 열이 있습니다. </p>
`our_sample`에는 2191개의 행이 있으며, 그 중 일부(60개 행)에는 `tls207_pers_appln`에 해당 데이터가 없습니다. </p>
<p>'our_sample'에 모든 appln_id를 유지하고 싶었기 때문에('tls207_pers_appln'에 일치하는 정보가 없더라도) RIGHT JOIN을 사용하여 두 테이블을 조인했습니다. </p>
<p>그러나 생성된 뷰 `t2_tot_in_patent`에는 appln_id가 2096개만 있습니다. </p>
<p>이것은 부분적으로 제가 설정한 제한 때문입니다(허용되는 `HAVING MAX(invt_seq_nr) > 0`인 특허만 선택했기 때문에 35개의 특허가 폐기되었습니다). 그러나 이로 인해 2191-35 = 2156개의 특허가 생성됩니다. </p>
<p>대신에 저는 2096개의 특허를 받았습니다.
2191(our_sample에서) - 60(our_sample에서 appln_id 누락) - 35(invt_seq_nr = 0인 appln_id) </p>
<p>그러나 RIGHT JOIN을 사용하는 전체 목적은 이러한 60개의 특허를 잃지 않아야 한다는 것입니다. 왜 그럴까요? </p>
<pre class="brush:php;toolbar:false;">--특허당 총 발명자 수를 컴파일합니다: t2_tot_in_patent
존재하는 경우 보기 삭제 t2_tot_in_patent;
t2_tot_in_patent AS 보기 만들기
SELECT m.appln_id, MAX(invt_seq_nr) AS tot_in_patent
patstat2022a.tls207_pers_appln AS t7에서
오른쪽 외부 조인 cecilia.our_sample AS m
ON t7.appln_id = m.appln_id
GROUP BY appln_id
HAVING MAX(invt_seq_nr) > 0</pre>
<p><br /></p>
추천:
으아악SQL이 다른 테이블의 appln_id에 따라 그룹화되는 것일 수도 있습니다.
이것을 시도해 보세요:
으아악현재 코드에서는 최대값이 0보다 큰 행만 가져오지만, 다른 테이블에 없는 행은 해당 값이
NULL
이므로 무시됩니다.