Optionnalité avec JSON_ARRAY_ELEMENTS
Exemple : LEFT JOIN JSON_ARRAY_ELEMENTS
1
INSERT INTO Personne
2
VALUES (
3
1,
4
'Holmes',
5
'Sherlock',
6
'[
7
{"numéro":221,"rue":"rue du boulanger", "cp":60200, "ville":"Compiègne"},
8
{"numéro":0,"rue":"rue Secrète", "cp":60200, "ville":"Compiègne"}
9
]'
10
);
11
12
INSERT INTO Personne
13
VALUES (
14
2,
15
'Watson',
16
'John'
17
);
1
sk | nom | prénom | adresse
2
----+--------+----------+---------------------------------------------------------------------------
3
1 | Holmes | Sherlock | [ +
4
| | | {"numéro":221,"rue":"rue du boulanger", "cp":60200, "ville":"Compiègne"},+
5
| | | {"numéro":0,"rue":"rue Secrète", "cp":60200, "ville":"Compiègne"} +
6
| | | ]
7
2 | Watson | John |
8
Remarque :
1
SELECT a->>a1, a->>a2... FROM t, JSON_ARRAY_ELEMENTS(t.jsonatt) a
équivalent à
1
SELECT a->>a1, a->>a2... FROM t JOIN JSON_ARRAY_ELEMENTS(t.jsonatt) a ON TRUE
Attention : L'opérateur JSON_ARRAY_ELEMENTS agit comme une jointure
1
SELECT p.nom, p.prénom, CAST(ad->>'numéro' AS INTEGER) AS numéro, ad->>'rue' AS rue, ad->>'ville' AS ville
2
FROM personne p JOIN JSON_ARRAY_ELEMENTS(p.adresse) ad ON TRUE
1
nom | prénom | numéro | rue | ville
2
--------+----------+--------+------------------+-----------
3
Holmes | Sherlock | 221 | rue du boulanger | Compiègne
4
Holmes | Sherlock | 0 | rue Secrète | Compiègne
Syntaxe : Convertir un tableau optionnel d'objets JSON en relationnel : opérateurs LEFT JOIN JSON_ARRAY_ELEMENTS et ->>
1
SELECT a->>a1, a->>a2... FROM t LEFT JOIN JSON_ARRAY_ELEMENTS(jsonatt) a on TRUE
Exemple : L'opérateur JSON_ARRAY_ELEMENTS agit comme une jointure
1
SELECT p.nom, p.prénom, CAST(ad->>'numéro' AS INTEGER) AS numéro, ad->>'rue' AS rue, ad->>'ville' AS ville
2
FROM personne p LEFT JOIN JSON_ARRAY_ELEMENTS(p.adresse) ad ON TRUE
1
nom | prénom | numéro | rue | ville
2
--------+----------+--------+------------------+-----------
3
Holmes | Sherlock | 221 | rue du boulanger | Compiègne
4
Holmes | Sherlock | 0 | rue Secrète | Compiègne
5
Watson | John | | |