subquery - N1QL 值 NOT IN 子查询,它返回一个数组
问题描述
我正在尝试编写一个 N1QL 查询,该查询返回其 id 不在数组中的所有记录。该数组可在另一个文档中找到。
我的播放列表文档示例:{"id":1,"name":"playlist1","tracksId":[1,2]}
我的 Track 文档示例:{"id":1,"title":"songtitle"}
具体来说,我希望我的查询返回在我的播放列表文档的 trackId 数组中找不到其 id 的所有曲目。
这是我使用子查询解决此问题的最佳尝试:
SELECT * FROM Track
WHERE id NOT IN (SELECT tracksId FROM Playlist WHERE id = 1)
不幸的是,这不起作用,因为我的子查询在字段内返回一个数组。有谁知道解决这个问题的方法?
解决方案
默认情况下,N1QL 查询给出了 JOSN 对象的数组。IN 或 NOT IN 的右边必须是左边数据类型的 ARRAY。
子查询项目一个元素使用 RAW 避免像下面这样的对象。
SELECT * FROM Track
WHERE id NOT IN (SELECT RAW tracksId FROM Playlist WHERE id = 1)
在您的情况下,tracksId 是另一个数组。您可以展平嵌套的 ARRAY 或 UNNEST 并创建一层 ARRAY
SELECT * FROM Track
WHERE id NOT IN ARRAY_FLATTEN((SELECT RAW tracksId FROM Playlist WHERE id = 1),1);
或者
SELECT * FROM Track
WHERE id NOT IN (SELECT RAW track FROM Playlist AS p UNNEST p.tracksId As track WHERE p.id = 1);
推荐阅读
- mysql - Apache Airflow - MySQL 到 BigQuery - 如何获取上个月的数据?
- html - 如何限制 mat-form-field (matInput) 用户只输入字符和特殊字符而不是数字?
- xml - 在 Oracle 中工作时出现 XML 结果中断
- here-api - Fleet WayPoint:按航点设置访问时间范围
- jquery - 用多个变量改变`value`的值' 字段
- maven - Intellij IDEA Cucumber 插件如果来自依赖项,则看不到步骤定义
- android - 如何在 ConstraintLayout 中刷新约束视图的高度
- sql - 内连接与子查询效率
- reactjs - 使用 props 传递组件
- docker - Docker Deploy HDP 错误:引用格式无效