[SQL] MySQL은 : 어떻게 같은 테이블에 여러 번 참여합니까?
SQLMySQL은 : 어떻게 같은 테이블에 여러 번 참여합니까?
나는 두 테이블 티켓과 ATTR 있습니다. 표 티켓 ticked_id 필드와 여러 가지 다른 필드가 있습니다. 표 ATTR 3 개 필드가 있습니다 :
ticket_id - numeric
attr_type - numeric
attr_val - string
attr_type 값 고정 열거된다. 예를 들어, 1, 2 또는 3 일 수있다.
나는 4 열 것입니다 결과가있는 쿼리를 확인해야합니다 :
TICKET_ID, attr_type = 1 attr_val, attr_type = 2 attr_val, attr_type = 3 attr_val
ATTR 테이블 attr_type 대한 대응하는 값이없는 경우, NULL 값이 열에 대응에 도시한다.
예:
ticket
ticket_id: 1
ticket_id: 2
ticket_id: 3
attr
ticket_id: 1
attr_type: 1
attr_val: Foo
ticket_id: 1
attr_type: 2
attr_val: Bar
ticket_id: 1
attr_type: 3
attr_val: Egg
ticket_id: 2
attr_type: 2
attr_val: Spam
결과는해야한다 :
ticked_id: 1
attr_val1: Foo
attr_val2: Bar
attr_val3: Egg
ticked_id: 2
attr_val1: NULL
attr_val2: Spam
attr_val3: NULL
ticked_id: 3
attr_val1: NULL
attr_val2: NULL
attr_val3: NULL
나는 ATTR 테이블 3 회에 가입 왼쪽 시도하지만, attr_type에 의해 출력을 정렬하는 방법을 알아낼 수 없습니다
해결법
-
==============================
1.여러 LEFT 조인을 사용해야합니다 :
여러 LEFT 조인을 사용해야합니다 :
SELECT ticket.ticket_id, a1.attr_val AS attr_val1, a2.attr_val AS attr_val2, a3.attr_val AS attr_val3 FROM ticket LEFT JOIN attr a1 ON ticket.ticket_id=a1.ticket_id AND a1.attr_type=1 LEFT JOIN attr a2 ON ticket.ticket_id=a2.ticket_id AND a2.attr_type=2 LEFT JOIN attr a3 ON ticket.ticket_id=a3.ticket_id AND a3.attr_type=3
SQL 바이올린 : 다음은 그 예이다.
-
==============================
2.이 경우에 조인 별칭 왼쪽을 사용할 수 있지만 당신은 또한 그룹화 및 조건식의 조합을 사용할 수 있습니다 :
이 경우에 조인 별칭 왼쪽을 사용할 수 있지만 당신은 또한 그룹화 및 조건식의 조합을 사용할 수 있습니다 :
select t.ticket_id, max(case when a.attr_type=1 then a.attr_val end) attr_val1, max(case when a.attr_type=2 then a.attr_val end) attr_val2, max(case when a.attr_type=3 then a.attr_val end) attr_val3 from ticket t left join attr a on t.ticket_id = a.ticket_id group by t.ticket_id
-
==============================
3.당신은 테이블 별칭을 사용
당신은 테이블 별칭을 사용
예를 들면 :
Select ticket.ticket_id, a1.attr_val as attr_val1, a2.attr_val as attr_val2, a3.attr_val as attr_val3 from ticket left join (select * from attr where attr_type=1) a1 on ticket.ticket_id=a1.ticket_id left join (select * from attr where attr_type=2) a2 on ticket.ticket_id=a2.ticket_id left join (select * from attr where attr_type=3) a3 on ticket.ticket_id=a3.ticket_id
from https://stackoverflow.com/questions/12561733/mysql-how-do-i-join-same-table-multiple-times by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server 2005의 ROW_NUMBER () ORDER BY없이 (0) | 2020.05.04 |
---|---|
[SQL] 가입하고 엔티티 프레임 워크에 포함 (0) | 2020.05.04 |
[SQL] 오라클의 DECODE 함수의 MySQL의 동등한 (0) | 2020.05.04 |
[SQL] JDBC 결과는 테이블 별칭으로 열을 얻을 (0) | 2020.05.04 |
[SQL] 날짜에 SQL 서버 변환 문자열 (0) | 2020.05.04 |