노동 조합을 사용하지 않고 MySQL과 함께 열을 열로 전환합니까?

StackOverflow https://stackoverflow.com/questions/1851781

  •  13-09-2019
  •  | 
  •  

문제

다음과 비슷한 테이블이 있습니다.

       id |        cat |         one_above |        top_level | 
        0    'printers'          'hardware'        'computers'

쿼리를 쓸 수 있기를 원합니다. 노조를 사용하지 않고,이 테이블의 열을 행으로 전송하는 결과 세트를 반환합니다. 이것이 의미하는 바는 결과가 다음과 같은 결과입니다.

       id |          cat |
        0      'printers'
        0      'hardware'
        0     'computers'

MySQL에서 가능합니까? 응용 프로그램 계층으로 떨어 뜨릴 수없고 ID를 기반으로 인덱스 할 검색 엔진에 공급하기 때문에이를 수행 할 수 없습니다. 다른 다양한 DBM에는 피벗 및 비 viT와 같은 것이 있습니다. 내가 놓친 것에 대한 통찰력에 감사드립니다.

마흐무드

추신

데이터베이스를 마지막 옵션으로 고려하고 있습니다. 이는 사소한 작업이 아니기 때문입니다.

감사!

도움이 되었습니까?

해결책

나는 이것을 책에서 얻었다 SQL의 예술, 284-286 페이지 :

테이블 이름이 있다고 가정 해 봅시다 foo.

먼저,라는 테이블을 만듭니다 pivot:

CREATE Table pivot (
  count int
);

피벗하려는 열이있는 것만 큼 많은 행에 해당 테이블에 삽입하십시오. foo. 3 개의 열이 있으므로 foo 피벗을하고 싶고 피벗 테이블에서 세 행을 만듭니다.

insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);

이제 카르테 시안에 가입하십시오 foo 그리고 pivot, a CASE 카운트를 기준으로 올바른 열을 선택하려면 다음과 같습니다.

SELECT foo.id, Case pivot.count
  When 1 Then cat
  When 2 Then one_above
  When 3 Then top_level
End Case
FROM foo JOIN pivot;

이것은 당신이 원하는 것을 줄 것입니다.

다른 팁

상당히 광범위한 파기 후 나는 넘어졌다 이 페이지 귀하의 답변을 포함하거나 포함하지 않을 수 있습니다. MySQL에서는 어렵지만 개념적 관점에서 볼 때 설명을 사용하여 이와 같은 쿼리를 구성 할 수 있습니다 (아마도 끔찍하게 수행 될 것입니다). 그래서 나는 우리가 올바른 방법으로 할 수있는 방법을 알아낼 수 있다고 확신합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top