用一个例子来解释可能更简单。考虑以下简单的 json:
[
{"id": 1, "ref":32, "key":10},
{"id": 2, "ref":32, "key":75},
{"id": 3, "ref":27, "key":13},
{"id": 4, "ref":27, "key":42},
{"id": 5, "ref":438, "key":42}
]
我想使用
jq
选择所有具有 ref
的元素,这样就有一个 ref
和 key
等于 42
的元素。
select * from table where ref in (select ref from table where key = 42)
我完全被难住了。我已经成功获得了此类参考的数组
'[.[]|select(.key==42).ref]'
我什至不清楚如何在硬编码列表中选择带有
.ref
的元素,例如
这会返回具有
ref == 32
的元素: .[] | select(.ref == 32)
但是我不知道如何选择列表中具有
ref
的记录[32,45]
。
我什至不清楚如何在硬编码列表中选择带有
的元素,例如这将返回具有.ref
的元素:ref == 32
但我不知道如何选择列表中具有.[] | select(.ref == 32)
的记录ref
。[32,45]
在这种情况下,只需将项目作为流列出即可:
.[] | select(.ref == (32,45))
。
select ref from table where key = 42
map(select(.key == 42).ref)
会给你数组[27,438]
。
select * from table where ref in (…)
使用
as
将先前的结果数组保存到变量中,然后迭代此引用:… as $ref | .[] | select(.ref == $refs[])
map(select(.key == 42).ref) as $refs | .[] | select(.ref == $refs[])
{
"id": 3,
"ref": 27,
"key": 13
}
{
"id": 4,
"ref": 27,
"key": 42
}
{
"id": 5,
"ref": 438,
"key": 42
}