【问题标题】:Sqllite : search value from json stringSqlite:从 json 字符串中搜索值
【发布时间】:2016-12-31 04:51:00
【问题描述】:

我有表名users 包含列名user_emailuser_email 列具有 json 格式的数据,如下所示。

[
  {
    "card_email_id": "98",
    "card_id": "88",
    "email": "raj@ccs.sg",
    "type": "Home"
  },
  {
    "card_email_id": "99",
    "card_id": "88",
    "email": "maulik@ccs.sg",
    "type": "Home"
  }
]

我想仅在 email 值中从 json 字符串中查询该搜索值。

我已经尝试过 REGEXP,但 sqlite 不支持。

这可能使用LIKE 运算符或其他方式吗?

【问题讨论】:

    标签: sql sqlite sqlite-json1


    【解决方案1】:

    在 SQLite 中有一个 JSON1 extension,您可以像这样使用它:

    SELECT *
    FROM users, json_each(user_email)
    WHERE 
        json_extract(json_each.value, '$.email') LIKE '%criteria%';
    

    还有related question about LIKE - HTH ;)。

    【讨论】:

    • 这通常在 Android 上尚不可用......但问题并没有要求这样做。 :)
    • @shA.t 当我在该查询中运行时,它会给出错误“无功能:json_extract”
    • load JSON1 扩展了吗?这是一个可加载的扩展;)。
    • 请注意,我不相信这会使用索引。您将为每个查询解析和扫描每一行。
    • @shA.t json_extract 在 json 对象中使用。我想从 json 数组中搜索,并且 json 数组中有很多次“电子邮件”对象。
    【解决方案2】:

    除非数据库支持 JSON 类型,否则 JSON 只是一个字符串。您要么需要将数据插入为适当的表和列,要么使用带有JSON type like PostgreSQL 的 SQL 数据库。

    在 SQLite 中,您可以将该数据转换为新的卡片电子邮件表,该表链接到卡片表(我认为存在)。

    create table card_email (
        id integer primary key auto_increment,
        card_id integer references cards(id),
        email text not null,
        type text not null
    );
    

    然后解析 JSON 并将其插入到该表中。

    【讨论】:

    • 是的,这是创建另一个表并保存它的选项。我在 android 和 ios 中使用 sqlite,所以没有像 POstgreSQL 这样的其他选项。如果不为此创建另一个表会更好。
    • @Maulikpatel 为什么你说最好不要再做一张桌子?
    • 我们在表中有大约 1M 行,8 列存储 json 字符串数据。如果我们要为 json 列创建单独的表,那么总共将有 9 个表。如果我们必须加入这 9 个表,这可能会降低移动应用中 sqlite 的性能。
    • @Maulikpatel 对于一个设计合理、索引良好的 SQL 数据库,100 万行和 9 个表算不了什么。您不必在单个查询中连接所有 9 个表,但如果它们使用整数主键,则连接非常有效。这就是关系数据库在过去 40 年中的设计目标:关系。 JSON 字段颠覆了关系数据库和 ORM 的效率,它基本上将数据库转换为必须一遍又一遍地解析的索引文本文件。我可以提供帮助,请参阅我的个人资料以获取信息。
    • 我指的是 sqlite 中的 1M 行。让我检查一下 Sqlite 的性能并回复你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2011-04-09
    • 1970-01-01
    • 2020-04-12
    相关资源
    最近更新 更多