>source

이것이 제가 하는 일입니다. 나는 이것이 일반적으로 나쁜 방법인지 알고 싶었습니다.

WITH correctB AS
(
    SELECT DISTINCT IDNR
    FROM Table_B
    WHERE col2= 1
)
SELECT *
FROM Table_A a
INNER JOIN correctB ON a.IDNR= correctB.IDNR
INNER JOIN Table_B b ON a.IDNR= b.IDNR

B는 IDNR의 배수를 포함합니다.

A에는 고유한 IDNR이 있습니다.

그래서 첫 번째 조인에서 올바른 IDNR을 먼저 찾습니다. 이 조인은 두 번째 조인과 동일한 테이블을 사용하지만 고유한 IDNR과 조건만 사용합니다.

그래서 첫 번째 가입만으로는 모든 것을 얻을 수 없습니다. 그리고 두 번째 가입만이 저를 너무 많이 얻을 수 있습니다.

따라서 Table_B에 IDNR의 값이 여러 개 있을 때 어떤 행을 반환하시겠습니까? CTE correctB는 실제로 쿼리 속도를 늦추는 것 외에는 아무 것도 달성하지 못합니다. 이후에 table_b의 DISTINCT가 아닌 결과에 대해 계속 JOIN하기 때문입니다.

Larnu2021-12-31 01:39:15

이것이 귀하의 질문에 대한 답변입니까? 각 그룹의 상위 1행 가져오기

Larnu2021-12-31 01:39:15

따라서 B가 여러 IDNR을 가질 때 B의 조인은 단일 테이블 A IDNR에서 여러 B 결과를 조인합니다. 이것은 맞습니다. 그러나 테이블 A와 테이블 B에 col2 <>1인 IDNR이 있으므로 조인해서는 안 됩니다. 그리고 correctB 조인은 이러한 일이 발생하지 않도록 합니다.

aludebe2021-12-31 01:39:15

그러면 올바른 B의 요점은 무엇입니까? 당신은 여기에서 의미가 없습니다.

Larnu2021-12-31 01:39:15

죄송합니다 내 댓글을 수정했습니다 Enter가 바로 보낼지 몰랐습니다

aludebe2021-12-31 01:39:15
  • 이전 K8S MySql configmap -읽기 전용 파일 시스템
  • 다음 python : df2의 날짜가 df1의 날짜보다 오래된 경우 df1의 ID가 df2에 존재하는지 확인하고 pandas를 사용하여 그에 따라 새 열을 추가하는 방법