sql - 检查 Postgres jsonb 是否包含其中一个值
问题描述
我需要检查 jsonb 字段是否可以是数组或字符串。我拥有的简单数据:
INSERT INTO users (jsonb) VALUES
('{"name":"Henry", "favoritefood_1":["eggs","apples"]}'),
('{"name":"Herald","favoritefood_1":["apples","potatoes"]}'),
('{"name":"Helen", "favoritefood_1":"apples"}');
我应该如何找到喜欢苹果和鸡蛋的用户?我尝试了很多查询,最后一个是:
SELECT * FROM users
WHERE CASE
WHEN jsonb_typeof((jsonb->>'favoritefood_1')::jsonb) = 'array'
THEN jsonb_array_elements((jsonb->>'favoritefood_1')::jsonb) IN ('apples', 'eggs')
ELSE (jsonb->>'favoritefood_1')::jsonb IN ('apples', 'eggs') END
有人可以帮我吗?
解决方案
应该?
工作:
where jsonb -> 'favoritefood_1' ? 'apples'
推荐阅读
- css - 使用 twin.macro 将外部样式应用于 Gatsby StaticImage
- c# - 实施电子邮件通知并让用户知道有人在他/她的帖子上回答
- java - 如何将主要活动文本视图的值设置为 BindviewHolder 中的变量。我正在尝试实现使用 firebase 的购物车布局
- signal-processing - FFT 输出对时间的导数是多少?
- c# - ConcurrentBag 和 ConcurrentStack 有什么区别?
- nfc - NFC 4aTag ISO-DEP APDU 和 NDEF
- asp.net - 无法将 MsSql 数据库容器用作 Azure Pipeline 中的资源
- java - 在 Spring Boot 应用程序中从数据库内容生成 HTML 文件
- javascript - RegExp 必须返回具有特殊条件的主题标签
- android-studio - 应用程序在尝试显示共享对话框时崩溃