Ranger
18-05-21, 07:46
Hallo,
ich habe nachfolgende (vereinfachte) Tabellen-Struktur
<tbody>
JSON_GRP1
JSON_GRP2
JSON_GRP3
JSON_GRP4
ID
ID
ID
ID
Name
Mail
Data1
Data2
1:
1:
n:
n
</tbody>
und ich versuche diese Datenstruktur mittels SQL in ein JSON zu pressen.
SELECT
CHAR(JSON_OBJECT(
'Info' VALUE JSON_OBJECT(
'Id' VALUE JSON_GRP1.ID
, 'Name' VALUE JSON_GRP1.NAME
)
, 'Group2' VALUE JSON_OBJECT(
'Email' VALUE TRIM(JSON_GRP2.MAIL)
)
, 'Data' VALUE JSON_OBJECT(
'Data1' VALUE json_arrayagg ( json_object ('Id' value trim(JSON_GRP3.DATA1) null on null))
, 'Data2' VALUE json_arrayagg ( json_object ('Id' value trim(JSON_GRP4.DATA2) null on null))
)
), 1000)
FROM JSON_GRP1
JOIN JSON_GRP2 ON JSON_GRP1.ID = JSON_GRP2.ID
LEFT JOIN JSON_GRP3 ON JSON_GRP1.ID = JSON_GRP3.ID
LEFT JOIN JSON_GRP4 ON JSON_GRP1.ID = JSON_GRP4.ID
GROUP BY JSON_GRP1.ID, JSON_GRP1.NAME, JSON_GRP2.MAIL
im Ergebnis kommt folgendes JSON heraus:
<tbody>
{"Info":{"Id":1,"Name":"Tester"}
,"Group2":{"Email":"tester@test.de"}
,"Data":{
"Data1":[{"Id":"11"},{"Id":"11"},{"Id":"12"},{"Id":"12"}]
,"Data2":[{"Id":"21"},{"Id":"22"},{"Id":"21"},{"Id":"22"}]}}
</tbody>
Wie bekomme ich die (markierten) doppelten Elemente weg, damit ich folgendes Ergebnis erhalte:
<tbody>
{"Info":{"Id":1,"Name":"Tester"}
,"Group2":{"Email":"tester@test.de"}
,"Data":{
"Data1":[{"Id":"11"},{"Id":"12"}]
,"Data2":[{"Id":"21"},{"Id":"22"}]}}
</tbody>
CREATE TABLE JSON_GRP1("ID" NUMERIC (5 ) NOT NULL WITH DEFAULT, NAME VARCHAR(20 ) NOT NULL WITH DEFAULT);
CREATE TABLE JSON_GRP2("ID" NUMERIC (5 ) NOT NULL WITH DEFAULT, MAIL VARCHAR(60 ) NOT NULL WITH DEFAULT);
CREATE TABLE JSON_GRP3("ID" NUMERIC (5 ) NOT NULL WITH DEFAULT, DATA1 NUMERIC (5 ) NOT NULL WITH DEFAULT);
CREATE TABLE JSON_GRP4("ID" NUMERIC (5 ) NOT NULL WITH DEFAULT, DATA2 NUMERIC (5 ) NOT NULL WITH DEFAULT);
INSERT INTO JSON_GRP1 VALUES (1, 'Tester');
INSERT INTO JSON_GRP2 VALUES (1, 'tester@test.de');
INSERT INTO JSON_GRP3 VALUES (1, 11);
INSERT INTO JSON_GRP3 VALUES (1, 12);
INSERT INTO JSON_GRP4 VALUES (1, 21);
INSERT INTO JSON_GRP4 VALUES (1, 22);
ich habe nachfolgende (vereinfachte) Tabellen-Struktur
<tbody>
JSON_GRP1
JSON_GRP2
JSON_GRP3
JSON_GRP4
ID
ID
ID
ID
Name
Data1
Data2
1:
1:
n:
n
</tbody>
und ich versuche diese Datenstruktur mittels SQL in ein JSON zu pressen.
SELECT
CHAR(JSON_OBJECT(
'Info' VALUE JSON_OBJECT(
'Id' VALUE JSON_GRP1.ID
, 'Name' VALUE JSON_GRP1.NAME
)
, 'Group2' VALUE JSON_OBJECT(
'Email' VALUE TRIM(JSON_GRP2.MAIL)
)
, 'Data' VALUE JSON_OBJECT(
'Data1' VALUE json_arrayagg ( json_object ('Id' value trim(JSON_GRP3.DATA1) null on null))
, 'Data2' VALUE json_arrayagg ( json_object ('Id' value trim(JSON_GRP4.DATA2) null on null))
)
), 1000)
FROM JSON_GRP1
JOIN JSON_GRP2 ON JSON_GRP1.ID = JSON_GRP2.ID
LEFT JOIN JSON_GRP3 ON JSON_GRP1.ID = JSON_GRP3.ID
LEFT JOIN JSON_GRP4 ON JSON_GRP1.ID = JSON_GRP4.ID
GROUP BY JSON_GRP1.ID, JSON_GRP1.NAME, JSON_GRP2.MAIL
im Ergebnis kommt folgendes JSON heraus:
<tbody>
{"Info":{"Id":1,"Name":"Tester"}
,"Group2":{"Email":"tester@test.de"}
,"Data":{
"Data1":[{"Id":"11"},{"Id":"11"},{"Id":"12"},{"Id":"12"}]
,"Data2":[{"Id":"21"},{"Id":"22"},{"Id":"21"},{"Id":"22"}]}}
</tbody>
Wie bekomme ich die (markierten) doppelten Elemente weg, damit ich folgendes Ergebnis erhalte:
<tbody>
{"Info":{"Id":1,"Name":"Tester"}
,"Group2":{"Email":"tester@test.de"}
,"Data":{
"Data1":[{"Id":"11"},{"Id":"12"}]
,"Data2":[{"Id":"21"},{"Id":"22"}]}}
</tbody>
CREATE TABLE JSON_GRP1("ID" NUMERIC (5 ) NOT NULL WITH DEFAULT, NAME VARCHAR(20 ) NOT NULL WITH DEFAULT);
CREATE TABLE JSON_GRP2("ID" NUMERIC (5 ) NOT NULL WITH DEFAULT, MAIL VARCHAR(60 ) NOT NULL WITH DEFAULT);
CREATE TABLE JSON_GRP3("ID" NUMERIC (5 ) NOT NULL WITH DEFAULT, DATA1 NUMERIC (5 ) NOT NULL WITH DEFAULT);
CREATE TABLE JSON_GRP4("ID" NUMERIC (5 ) NOT NULL WITH DEFAULT, DATA2 NUMERIC (5 ) NOT NULL WITH DEFAULT);
INSERT INTO JSON_GRP1 VALUES (1, 'Tester');
INSERT INTO JSON_GRP2 VALUES (1, 'tester@test.de');
INSERT INTO JSON_GRP3 VALUES (1, 11);
INSERT INTO JSON_GRP3 VALUES (1, 12);
INSERT INTO JSON_GRP4 VALUES (1, 21);
INSERT INTO JSON_GRP4 VALUES (1, 22);