JSON_OVERLAPS() în MySQL

Verifică dacă două documente JSON au măcar un element sau o pereche cheie-valoare în comun.

Sintaxă
JSON_OVERLAPS(document1, document2)

Ce face JSON_OVERLAPS()

Pentru liste, JSON_OVERLAPS() returnează 1 dacă există cel puțin un element comun. Pentru obiecte, dacă există o pereche cheie-valoare comună.

Parametri

Parametru Descriere
document1, document2 Documentele comparate.

Ce returnează

1 sau 0.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE profiluri (
  id INT PRIMARY KEY,
  date JSON
);

INSERT INTO profiluri VALUES
  (1, '{"nume": "Ana", "oras": "Iași", "varsta": 31, "hobby": ["citit", "înot"], "adresa": {"strada": "Lăpușneanu", "nr": 12}}'),
  (2, '{"nume": "Dan", "oras": "Cluj", "varsta": 45, "hobby": ["ciclism"]}'),
  (3, '{"nume": "Ioana", "oras": "Iași", "varsta": 27, "hobby": []}');

Exemplul 1: Interese comune

SELECT date->>'$.nume' AS nume,
       JSON_OVERLAPS(date->'$.hobby', '["înot", "ciclism"]') AS interes_comun
FROM profiluri
ORDER BY id;

Rezultat

+-------+---------------+
| nume  | interes_comun |
+-------+---------------+
| Ana   |             1 |
| Dan   |             1 |
| Ioana |             0 |
+-------+---------------+

Greșeli frecvente

  • Folosești JSON_CONTAINS() când vrei „oricare din”. JSON_CONTAINS() cere ca toate elementele să existe; pentru „măcar unul” e JSON_OVERLAPS().

Comenzi înrudite

  • JSON_CONTAINS(): Verifică dacă un document JSON conține o anumită valoare sau un sub-document.
  • MEMBER OF(): Verifică dacă o valoare se află într-o listă JSON; poate folosi indexuri multi-valoare.