如何使用 H2 数据库中包含数组的列来获取 n 1 行

How to work with column containg array in H2 database to get n 1 row

我是 H2 数据库的新手。例如,我在数据库中有 3 tables,

table t1 :

ID desc something condition_id
1 EN 142868 151508 XYZ [4686, 4687]

table条件

CONDITION_ID desc COLUMN3
4686 desc1 something1
4687 desc2 something2

我需要这样的输出

ID desc t1something joined Column
1 EN 142868 151508 XYZ desc1 something1, desc2 somethin2

如何做到这一点,我尝试使用 array_contains,但结果它给出了 2 行,例如' t1ID t1desc t1something joined Column 1 EN 142868 151508 XYZ desc1 something1 1 EN 142868 151508 XYZ desc2 somethin2

请帮忙。提前谢谢你

您需要对来自 table T1 的行进行分组并聚合来自 table CONDITION:

的行
CREATE TABLE T1(ID INT, DESC VARCHAR, SOMETHING VARCHAR, CONDITION_ID INT ARRAY)
AS VALUES (1, 'EN 142868 151508', 'XYZ', ARRAY[4686, 4687]);

CREATE TABLE CONDITION(CONDITION_ID INT, DESC VARCHAR, COLUMN3 VARCHAR)
AS VALUES (4686, 'desc1', 'something1'), (4687, 'desc2', 'something2');

SELECT T1.ID, T1.DESC, T1.SOMETHING,
    LISTAGG(CONDITION.DESC || ' ' || CONDITION.COLUMN3, ', ') JOINED_COLUMN
FROM T1 LEFT JOIN CONDITION ON ARRAY_CONTAINS(T1.CONDITION_ID, CONDITION.CONDITION_ID)
GROUP BY T1.ID, T1.DESC, T1.SOMETHING;
> ID | DESC             | SOMETHING | JOINED_COLUMN
> -- | ---------------- | --------- | ----------------------------------
> 1  | EN 142868 151508 | XYZ       | desc1 something1, desc2 something2

如果要排除 T1 中没有 CONDITION 中相应条目的行,请使用内部 JOIN 而不是 LEFT JOIN

如果您需要一些确切的条目顺序,您可能还想将 WITHIN GROUP (ODRER BY some_columns) 子句添加到 LISTAGG 聚合函数:

LISTAGG(CONDITION.DESC || ' ' || CONDITION.COLUMN3, ', ')
WITHIN GROUP (ORDER BY CONDITION.CONDITION_ID)
JOINED_COLUMN

或者,您可以使用子查询:

SELECT T1.ID, T1.DESC, T1.SOMETHING,
  (
    SELECT LISTAGG(CONDITION.DESC || ' ' || CONDITION.COLUMN3, ', ')
    FROM CONDITION
    WHERE ARRAY_CONTAINS(T1.CONDITION_ID, CONDITION.CONDITION_ID)
  ) JOINED_COLUMN
FROM T1;