MEMBER OF() în MySQL

Verifică dacă o valoare se află într-o listă JSON; poate folosi indexuri multi-valoare.

Sintaxă
valoare MEMBER OF(lista_json)

Ce face MEMBER OF()

valoare MEMBER OF(lista) returnează 1 dacă valoarea este unul dintre elementele listei. Spre deosebire de JSON_CONTAINS(), valoarea se scrie normal, nu ca JSON.

Pe coloane cu index multi-valoare (CAST(... AS ... ARRAY)), condiția poate folosi indexul.

Parametri

Parametru Descriere
valoare Valoarea căutată (text, număr).
lista_json Lista JSON în care se caută.

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: Valori simple într-o listă

SELECT 2 MEMBER OF('[1, 2, 3]') AS numar, 'b' MEMBER OF('["a", "b"]') AS text;

Rezultat

+-------+------+
| numar | text |
+-------+------+
|     1 |    1 |
+-------+------+

Exemplul 2: Filtrarea după un element din listă

SELECT date->>'$.nume' AS nume
FROM profiluri
WHERE 'citit' MEMBER OF(date->'$.hobby');

Rezultat

+------+
| nume |
+------+
| Ana  |
+------+

Greșeli frecvente

  • Scrii MEMBER OF fără paranteze în jurul listei. Sintaxa cere MEMBER OF(...).

Comenzi înrudite

  • JSON_CONTAINS(): Verifică dacă un document JSON conține o anumită valoare sau un sub-document.
  • JSON_OVERLAPS(): Verifică dacă două documente JSON au măcar un element sau o pereche cheie-valoare în comun.
  • IN: Verifică dacă o valoare se află într-o listă. Înlocuiește mai multe condiții OR.