본문 바로가기
MySql

MySQL MYSQL Inner Join with 2 ON Clauses

by 베이스 공부 2020. 12. 28.
반응형

사용자가 있고 거주지 주소와 우편 주소를 모두 저장하는 간단한 데이터베이스를 설정하려고합니다. 테이블이 2 개 있어요

사용자

id (Primary Key)    
name (Varchar 255)
residential_id (foreign key)
postal_id (foreign key)

주소

id (primary key)
type (enum of R and P)
street (varchar 255)
suburb (varchar 255)

내부 조인을 시도하고 있는데 결과 세트는 다음과 같습니다.

id-이름-Residential_street-Residential_suburb, postal_street, postal_suburb

주소 세부 정보에 대해 null 결과가 계속 발생합니다. 주소 테이블에서 두 세트의 데이터를 얻고 충돌이 있기 때문이라고 가정합니다. 거주자 ID와 우편 ID에 연결된 주소 필드를 동시에 반환 할 수 있습니까?

내 SQL 구문은

SELECT * FROM users 
LEFT JOIN address
ON (users.residential_id = address.id AND users.postal_id = address.id)

편집하다. 지적했듯이 내 DB 디자인이 다소 열악하고 개선하려고합니다. 내가 달성하려는 핵심은 관련된 거주지 및 우편 주소와 함께 사람의 세부 정보를 저장할 수 있다는 것입니다. 예를 들어 작업 주소를 포함하도록 데이터베이스를 확장하지 않을 것이므로 테이블의 복잡성을 줄일 수 있기를 바랍니다.

 

해결 방법

 

다음은

당신이 원하는 것은 :

select 
  u.*, 
  res.street residential_street,
  res.suburb residential_suburb,
  pos.street postal_street,
  pos.suburb postal_suburb
from users u
    left join address res on u.id=res.id and res.addressType='R'
    left join address pos on u.id=pos.id and pos.addressType='P'

여기서 핵심은 주소 테이블에 두 번 조인해야한다는 것입니다. 각 조인이 적절한 유형의 주소 만 선택하려면 주소 유형 판별자가 필요합니다. 귀하의 스키마가 다른 경우 명확하게 해주시면 답변을 수정하겠습니다.

 

참조 페이지 https://stackoverflow.com/questions/1753562

 

 

반응형

댓글