【发布时间】:2020-12-16 05:48:26
【问题描述】:
我正在尝试运行以下查询
SELECT
DISTINCT jsonb_object_keys("classif_ai_fileregion"."defects") AS "defect_ids"
FROM "classif_ai_fileregion"
WHERE
("classif_ai_fileregion"."file_id" IN
(SELECT U0."id" FROM "classif_ai_file" U0 )
AND
"classif_ai_fileregion"."ml_model_id" IN
(SELECT U0."id" FROM "classif_ai_mlmodel" U0 WHERE U0."id" IN (2)))
我收到以下错误
SELECT DISTINCT jsonb_object_keys("classif_ai_fileregion"."defects") AS "defect_ids" FROM "classif_ai_fileregion"
WHERE
("classif_ai_fileregion"."fi...
ERROR: set-valued function called in context that cannot accept a set
Position: 17
SELECT DISTINCT jsonb_object_keys("classif_ai_fileregion"."defects") AS "defect_ids" FROM "classif_ai_fileregion"
^
现在,我尝试了上述查询的一些修改版本,它们似乎都可以工作。从上面的查询中,我将 U0."id" IN (2) 替换为 U0."id" IN (1,2) 或 U0."id" IN (1) 并且查询有效。或者我删除 "classif_ai_fileregion"."file_id" IN (SELECT U0."id" FROM "classif_ai_file" U0 ) AND 并且它可以工作。
我无法理解为什么它适用于这些修改以及为什么它不适用于原始查询。
为便于理解查询,以下是表格。
-
classif_ai_file
- 身份证
-
classif_ai_mlmodel
- 身份证
-
classif_ai_fileregion
- 身份证
- file_id
- ml_model_id
- 缺陷 - jsonb 类型
缺陷列的格式为 {1: {}, 2: {}}
注意:我在这一行下面写了一些类似的查询,它们可以完成一些工作,而问题中的初始查询却没有。
SELECT
DISTINCT jsonb_object_keys("classif_ai_fileregion"."defects") AS "defect_ids"
FROM "classif_ai_fileregion"
WHERE
("classif_ai_fileregion"."file_id" IN
(SELECT U0."id" FROM "classif_ai_file" U0 )
AND
"classif_ai_fileregion"."ml_model_id" IN
(SELECT U0."id" FROM "classif_ai_mlmodel" U0 WHERE U0."id" IN (1)))
您可以注意到我只是在此查询中将 2 更改为 1。
SELECT
DISTINCT jsonb_object_keys("classif_ai_fileregion"."defects") AS "defect_ids"
FROM "classif_ai_fileregion"
WHERE
("classif_ai_fileregion"."file_id" IN
(SELECT U0."id" FROM "classif_ai_file" U0 )
AND
"classif_ai_fileregion"."ml_model_id" IN
(SELECT U0."id" FROM "classif_ai_mlmodel" U0 WHERE U0."id" IN (1,2)))
您可以注意到我只是在此查询中将 2 更改为 1,2。
SELECT
DISTINCT jsonb_object_keys("classif_ai_fileregion"."defects") AS "defect_ids"
FROM "classif_ai_fileregion"
WHERE
"classif_ai_fileregion"."ml_model_id" IN
(SELECT U0."id" FROM "classif_ai_mlmodel" U0 WHERE U0."id" IN (2)))
我在这个查询中删除了一个额外的 where 子句。
SELECT
DISTINCT jsonb_object_keys("classif_ai_fileregion"."defects") AS "defect_ids"
FROM "classif_ai_fileregion"
WHERE
("classif_ai_fileregion"."file_id" IN
(SELECT U0."id" FROM "classif_ai_file" U0 )
AND
"classif_ai_fileregion"."ml_model_id" IN
(2))
我只是在这里简化了 ml_model_id 的 where 子句
【问题讨论】:
-
那么您的问题是如何避免设置返回函数的问题,或者为什么 ORM 生成的条件不能正常工作?请每个问题只问一个问题。
-
你可以完全忽略 ORM 的事情。我想了解是什么导致我在问题中发布的查询中出现此错误。为什么它适用于我在问题底部发布的其他类似查询
标签: sql postgresql