【发布时间】:2015-02-16 14:10:59
【问题描述】:
这是我的表格(简化,只有重要的列):
CREATE TABLE things (
id serial primary key
, name varchar
, blueprint json default '{}'
);
还有一些示例数据:
# select * from things;
id | name | blueprint
----+---------+-----------------------------------------------------------------------------
1 | Thing 1 | {}
2 | Thing 2 | {"1":{"name":"Iskapola","wight":"2"}}
3 | Thing 3 | {"1":{"name":"Azamund","weight":"3"}, "2":{"name":"Iskapola","weight":"1"}}
4 | Thing 4 | {"1":{"name":"Ulamir","weight":"1"}, "2":{"name":"Azamund","weight":"1"}}
我想选择在name 键下的任意位置具有'Azamund' 的行。
像这样的:
# select * from things where * ->> 'name' = 'Azamund';
id | blueprint
----+----------------------------------------------------------------------------
7 | {"1":{"name":"Azamund","weight":"3"}, "2":{"name":"Iskapola","weight":"1"}}
8 | {"1":{"name":"Ulamir","weight":"1"}, "2":{"name":"Azamund","weight":"1"}}
数据的嵌套与示例中的完全相同(只有一层)。
目前我们使用的是 PostgreSQL 9.3.5。
在 PostgreSQL 9.3 中可以吗?也许是 9.4?
【问题讨论】:
-
我不确定,但这可能会对您有所帮助stackoverflow.com/questions/10560394/…
-
谢谢!我看到了那个问题...但是这里的区别-我不能写下
name列的关键路径...它可以在'1'或'9'键下。我仍然应该能够找到它。无论如何-谢谢。我已经添加了更多有问题的细节以突出显示它......(希望它很清楚) -
所以只有一层嵌套?此外,实际的表定义总是很有帮助。数据类型可能是
text或json或jsonb? ...NOT NULL? -
@ErwinBrandstetter - 添加了有关表模式的更多信息。好吗?
-
我冒昧地整理了您的问题,因为我想我将来可能会提到它。我希望我抓住了要点?
标签: sql json postgresql nested