> 데이터 베이스 > MySQL 튜토리얼 > Informix SQL에서 일대다 관계를 고유한 열로 변환하는 방법은 무엇입니까?

Informix SQL에서 일대다 관계를 고유한 열로 변환하는 방법은 무엇입니까?

DDD
풀어 주다: 2025-01-03 04:15:39
원래의
866명이 탐색했습니다.

How to Transform One-to-Many Relationships into Distinct Columns in Informix SQL?

일대다 관계를 고유 열로 표시하는 방법

문제:
데이터가 다음과 같은 상황에 직면합니다. 일대다 관계를 보다 구조화되고 읽기 쉬운 방식으로 표현하려고 합니다. 특히 고유 ID와 쉼표로 구분된 값 목록이 포함된 열이 있는 테이블을 각 고유 값이 별도의 열에 표시되는 테이블로 변환하려고 합니다.

Informix SQL 솔루션:
Informix SQL에서 권장되는 접근 방식은 사용자 정의 집계 함수를 활용하는 것입니다. Informix는 기본적으로 group_concat() 함수를 제공하지 않지만 해당 기능을 모방하는 사용자 정의 집계를 생성할 수 있습니다.

사용자 정의 집계 생성:
다음 코드는 방법을 보여줍니다. 필요한 사용자 정의를 생성하려면 집계:

CREATE FUNCTION gc_init(dummy VARCHAR(255)) RETURNING LVARCHAR;
    RETURN '';
END FUNCTION;

CREATE FUNCTION gc_iter(result LVARCHAR, value VARCHAR(255))
    RETURNING LVARCHAR;
    IF result = '' THEN
        RETURN TRIM(value);
    ELSE
        RETURN result || ',' || TRIM(value);
    END IF;
END FUNCTION;

CREATE FUNCTION gc_comb(partial1 LVARCHAR, partial2 LVARCHAR)
    RETURNING LVARCHAR;
    IF partial1 IS NULL OR partial1 = '' THEN
        RETURN partial2;
    ELIF partial2 IS NULL OR partial2 = '' THEN
        RETURN partial1;
    ELSE
        RETURN partial1 || ',' || partial2;
    END IF;
END FUNCTION;

CREATE FUNCTION gc_fini(final LVARCHAR) RETURNING LVARCHAR;
    RETURN final;
END FUNCTION;

CREATE AGGREGATE group_concat
    WITH (INIT = gc_init, ITER = gc_iter,
          COMBINE = gc_comb, FINAL = gc_fini);
로그인 후 복사

사용:
집계를 생성한 후에는 쿼리에서 이를 활용하여 원하는 변환을 얻을 수 있습니다.

SELECT id, group_concat(codes)
FROM anonymous_table
GROUP BY id;
로그인 후 복사

예:
라는 이름의 예제 테이블을 고려해 보겠습니다. anonymous_table:

CREATE TEMP TABLE anonymous_table
(
    id      INTEGER NOT NULL,
    codes   CHAR(4) NOT NULL,
    PRIMARY KEY (id, codes)
);

INSERT INTO anonymous_table VALUES(63592, 'PELL');
INSERT INTO anonymous_table VALUES(58640, 'SUBL');
INSERT INTO anonymous_table VALUES(58640, 'USBL');
INSERT INTO anonymous_table VALUES(73571, 'PELL');
INSERT INTO anonymous_table VALUES(73571, 'USBL');
INSERT INTO anonymous_table VALUES(73571, 'SUBL');
로그인 후 복사

앞에서 언급한 쿼리를 이 테이블에 적용하면 다음과 같은 출력이 생성됩니다.

58640 SUBL,USBL
63592 PELL
73571 PELL,SUBL,USBL
로그인 후 복사

이는 집계 함수가 각 고유 ID와 연관된 코드를 효과적으로 그룹화하고 연결하는 방법을 보여줍니다. , 데이터를 더욱 체계적으로 표현합니다.

위 내용은 Informix SQL에서 일대다 관계를 고유한 열로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿