[오늘의 문제] Combine Two Tables

shlim55·2026년 1월 13일

코딩테스트

목록 보기
214/223

출처: https://leetcode.com/problems/combine-two-tables/description/

+-------------+---------+
| 열 이름 | 유형 |
+-------------+---------+
| 개인 ID | 정수 |
| 성 | varchar |
| firstName | varchar |
+-------------+---------+
personId는 이 테이블의 기본 키(고유 값을 가진 열)입니다.
이 표에는 몇몇 사람들의 ID와 이름(성 및 이름)에 대한 정보가 포함되어 있습니다.

테이블:Address

+-------------+---------+
| 열 이름 | 유형 |
+-------------+---------+
| 주소 ID | 정수 |
| 개인 ID | 정수 |
| 도시 | 바르차르 |
| 상태 | varchar |
+-------------+---------+
addressId는 이 테이블의 기본 키(고유 값을 가진 열)입니다.
이 표의 각 행에는 ID가 PersonId인 한 사람에 대한 도시 및 주 정보가 포함되어 있습니다.

표 에 있는 각 사람의 이름, 성, 도시, 주를 출력하는 코드를 작성하세요 Person. 만약 a의 주소가 표 personId에 없다면 Address, null대신 를 출력하세요.

결과 테이블을 어떤 순서 로든 반환합니다 .

결과 형식은 다음 예시와 같습니다.

예시 1:

입력:
인원표:
+----------+----------+-----------+
| 개인 ID | 성 | 이름 |
+----------+----------+-----------+
| 1 | 왕 | 앨런 |
| 2 | 앨리스 | 밥 |
+----------+----------+-----------+
주소 테이블:
+-----------+----------+---------------+------------+
| 주소 ID | 개인 ID | 도시 | 주 |
+-----------+----------+---------------+------------+
| 1 | 2 | 뉴욕시 | 뉴욕 |
| 2 | 3 | 리트코드 | 캘리포니아 |
+-----------+----------+---------------+------------+
산출:
+-----------+----------+---------------+----------+
| 이름 | 성 | 도시 | 주 |
+-----------+----------+---------------+----------+
| 앨런 | 왕 | 널 | 널 |
| 밥 | 앨리스 | 뉴욕시 | 뉴욕 |
+-----------+----------+---------------+----------+
설명:
주소 테이블에 personId = 1에 해당하는 주소가 없으므로 해당 도시와 주에는 null을 반환합니다.
addressId = 1에는 personId = 2의 주소에 대한 정보가 포함되어 있습니다.

내가 한 풀이

SELECT p.firstName, p.lastName, IFNULL(a.city, null)AS city, IFNULL(a.state, null)AS state
FROM Person p
LEFT JOIN Address a
ON p.personId = a.personId 

트러블 슈팅

우선 LEFT JOIN을 해야 한다는 점.
LEFT JOIN: 주소 정보가 없더라도 Person의 모든 데이터를 가져온다.
이때 주소 정보가 없는 컬럼은 NULL이 되며, 여기서 IFNULL 작동.

두번째는 AS 별칭도 줘야 한다는 점

profile
A Normal Programmer

0개의 댓글