postgresql - 为什么我的 postgreSQL 查询没有从我的表中找到正确的对象?
问题描述
我得到的东西像 == is not a symbol and command not found。通过电子邮件选择用户的正确方法是什么?这是我的表架构:
-- Your database schema goes here --
-- USERS TABLE --
DROP TABLE IF EXISTS users;
CREATE TABLE users(userAccount jsonb);
-- SECRETS TABLE --
DROP TABLE IF EXISTS secrets;
CREATE TABLE secrets(secrets jsonb);
这是我的填充表:
-- USERS TABLE POPULATION --
DELETE FROM users;
INSERT INTO users VALUES ('{"name":"Jack Cooper","password":"banana","email":"jc@gmail.com","role":"admin"}');
INSERT INTO users VALUES ('{"name":"Emmanuel Pena", "password":"potato", "email":"ep@gmail.com", "role": "admin"}');
我尝试过的查询是:
SELECT userAccount FROM users WHERE userAccount->'email' ~* $1
SELECT userAccount FROM users WHERE userAccount->'email' LIKE $1
SELECT userAccount FROM users WHERE userAccount->'email' = $1
SELECT userAccount FROM users WHERE userAccount->'email' == $1
解决方案
您正在使用带有单箭头的 json,同时过滤您想要使用的文本,因为json compared to string
在任何 SQL 语句中都是无效的,因此请使用以下语法。
SELECT userAccount->'email' FROM users where userAccount->>'email'like'%@gmail.com';
这个怎么运作:
PostgreSQL 提供了两个原生运算符 -> 和 ->> 来帮助您查询 JSON 数据。
The operator -> returns JSON object field by key.
The operator ->> returns JSON object field by text.
推荐阅读
- android - Android Room:应用与嵌入对象相关的多个列
- ios - 使用泛型时无法调用 UIViewController 的非函数类型的值
- powershell - 移除导入的本地化数据
- eclipse - 有没有办法将智能插入添加到自定义 Eclipse 编辑器?
- reactjs - React Hooks - 改变孩子内部的状态不会反映在父母身上
- python - 使用堆栈溢出数据文件的熊猫数据帧
- html - 使用 flex-direction 列反向定位粘性
- amazon-mws - 销售伙伴 API 供稿 API
- multithreading - 为什么用Receiver声明receiver
? - dvc - 数据版本控制 (dvc) 无法推送到远程存储,因为查询缓存