Как сделать запрос на основе значения объекта?
У меня есть таблица базы данных 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)