Как сделать запрос на основе значения объекта?

У меня есть таблица базы данных crate с записями, подобными приведенным ниже:

  {
    "businessareaname": "test",
    "profile": {
      "phone": "",
      "fullname": "",
      "email": "abe-10@spatially.com"
    }
  }

Я пытался сделать запрос с:

select * 
from myTable 
where profile['email'] = 'abe-10@spatially.com';

но ничего не вернулось. Как я могу получить записи, основанные на значении электронной почты в объекте?

Это не плоский стол, поэтому это моя лучшая попытка показать структуру таблицы. Первая строка - это заголовок, а следующие две строки - данные.

    business name | profile:
                    - phone
                    - fullname
                    - email
    -------------------------------------
    "test"       | ""
                   ""
                   "abe-10@spatially.com"
   -------------------------------------
    "other one"  | "(415)884-9938"
                   "Abe Miessler"
                   "abe@test.com"

1 ответ

Решение

Пример, который вы написали, должен работать и правильно.

Это может не сработать из-за неправильной схемы таблицы, а именно:

  • Столбец электронной почты был создан с INDEX OFF
  • Столбец объекта был создан с типом столбца IGNORED
  • В столбце электронной почты есть полнотекстовый индекс / анализатор, поэтому электронная почта является токенизированной.

Вот полный рабочий пример:

create table t1 (profile object as (email string));

insert into t1 (profile) values ({email='abe-10@spatially.com'});

refresh table t1;

select * from t1 where profile['email'] = 'abe-10@spatially.com';

Если по трубопроводу crash это вывело бы:

CONNECT OK
CREATE OK, 1 row affected  (0.286 sec)
INSERT OK, 1 row affected  (0.082 sec)
REFRESH OK, 1 row affected  (0.065 sec)
+-----------------------------------+
| profile                           |
+-----------------------------------+
| {"email": "abe-10@spatially.com"} |
+-----------------------------------+
SELECT 1 row in set (0.087 sec)
Другие вопросы по тегам