首頁 > 資料庫 > mysql教程 > 如何在 Informix SQL 中將一對多關係顯示為逗號分隔清單?

如何在 Informix SQL 中將一對多關係顯示為逗號分隔清單?

Patricia Arquette
發布: 2025-01-03 17:29:40
原創
350 人瀏覽過

How to Display One-to-Many Relationships as Comma-Separated Lists in Informix SQL?

使用Informix SQL 作為具有逗號分隔清單的唯一行的一對多關係

與Stack Overflow 上提出的問題類似,這本文提供了一個Informix SQL解決方案,用於將一對多關係顯示為以逗號分隔的單一唯一行

初始資料

1

2

3

4

5

6

7

id     codes

63592  PELL

58640  SUBL

58640  USBL

73571  PELL

73571  USBL

73571  SUBL

登入後複製

所需輸出

1

2

3

4

id     codes

63592  PELL

58640  SUBL, USBL

73571  PELL, USBL, SUBL

登入後複製

自訂使用者定義的聚合

為了實現如果需要輸出,則需要自訂使用者定義聚合(UDA)。下面是一個名為 group_concat 的 UDA 範例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

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);

登入後複製

分組串聯查詢

將 group_concat UDA group應用於原始數據,我們可以按唯一 id進行分組,使用自定義聚合代碼UDA:

1

2

3

SELECT id, group_concat(codes)

    FROM anonymous_table

    GROUP BY id;

登入後複製

輸出

1

2

3

58640 SUBL,USBL

63592 PELL

73571 PELL,SUBL,USBL

登入後複製

附加註釋

  • 此UDA 處理以下資料型態:可以轉換為VARCHAR(255)(例如,數字或時間
  • 從Informix 12.10.FC5 開始,聚合結果的最大長度為16380 位元組。
  • 要刪除UDA 和關聯函數,請執行以下命令:

1

2

3

4

5

DROP AGGREGATE IF EXISTS group_concat;

DROP FUNCTION IF EXISTS gc_fini;

DROP FUNCTION IF EXISTS gc_init;

DROP FUNCTION IF EXISTS gc_iter;

DROP FUNCTION IF EXISTS gc_comb;

登入後複製

以上是如何在 Informix SQL 中將一對多關係顯示為逗號分隔清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板