如何使用H2数据库中的列Containg数组以获取N 1行

发布于 2025-01-23 21:40:35 字数 1558 浏览 1 评论 0原文

我是H2数据库的新手。我在数据库中有3个表,

descsomending_id11
en142868 142868 151508xyz4686,4687]

表条件条件条件

desccolumn34686
desc1dess4687
desc2desc2 desc2desc2 something

2

[condition_idsometsing
IDT1 142868 151508xyzdesc1 sosings1,desc2 somethin2

如何做到这一点,我尝试了array_contains,但是它给出了2行,结果是't1ID t1desc t1something Join join join ofin ofin coin of Cinter 1 en 142868 151508 151508 xyz desc1 xyc1 somets 1 1 en 142868 142868 151508 xyz xyz22222

。先感谢您

I am new to H2 database. I have 3 tables in database for example,

table t1 :

IDdescsomethingcondition_id
1EN 142868 151508XYZ[4686, 4687]

table condition

CONDITION_IDdescCOLUMN3
4686desc1something1
4687desc2something2

And I need output like this

IDdesct1somethingjoined Column
1EN 142868 151508XYZdesc1 something1, desc2 somethin2

How to do this, I tried with array_contains, but its giving 2 rows as a result like' t1ID t1desc t1something joined Column 1 EN 142868 151508 XYZ desc1 something1 1 EN 142868 151508 XYZ desc2 somethin2

Please help. Thank you in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

宫墨修音 2025-01-30 21:40:35

您需要从表t1将行分组,然后从表条件汇总行:

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将行排除,而无需在条件,使用内部JOIN而不是左JOIN

您可能还需要在组中添加(odrer by Some_columns)listAgg汇总函数如果需要一些确切的条目:

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

或者,您可以使用subquery:

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;

You need to group rows from table T1 and aggregate rows from 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

If you want to exclude rows from T1 without corresponding entries in CONDITION, use inner JOIN instead of LEFT JOIN.

You may also want to add WITHIN GROUP (ODRER BY some_columns) clause to LISTAGG aggregate function if you need some exact order of entries:

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

Alternatively, you can use a subquery:

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文