【问题标题】:Query JSONB without keys无键查询 JSONB
【发布时间】:2019-11-21 17:36:13
【问题描述】:

我有一个名为 test 的表。在这个表里面有一列叫做 jsonb 的字母。此列中包含 []、["a"]、["b"]、["a"、"b"、"c"] 等数据,但没有键值。如何查询包含其中之一的所有行,例如“b”(所以,最后 2 个)?

我所拥有的目前不起作用。

我正在尝试:

SELECT *
    FROM db.test
    WHERE (letters->>'')::jsonb ?| array['b'];

也试过

SELECT *
    FROM db.test
    WHERE letters::jsonb ?| array['b'];

SELECT *
        FROM db.test
        WHERE letters::jsonb ? 'b';

【问题讨论】:

  • "SELECT * FROM db.test WHERE letters::jsonb ?| array['b'];"这个对我有用。你是什​​么意思它不起作用?会发生什么而不是工作? (尽管如果这已经是列的类型,那么转换为 jsonb 是没有意义的。)

标签: sql postgresql jsonb


【解决方案1】:

如果您使用的是 postgres 12,则可以使用 jsonb_path_exists:

# create table test (letters jsonb);
# insert into test VALUES ('[]'), ('["a"]'), ('["a", "b", "c"]');
# select letters
  FROM test where jsonb_path_exists(letters, 'strict $[*] ? (@ == "b")');
     letters
-----------------
 ["a", "b", "c"]
(1 row)


【讨论】:

    【解决方案2】:

    使用包含操作符:

    select *
    from test
    where letters @> '"b"'
    

    Db<>fidlle.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-27
      • 2015-10-15
      • 2019-06-17
      • 1970-01-01
      • 2023-03-16
      • 2019-07-02
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多