Mysql &引用;子查询只能返回一列";postgresql中的错误

Mysql &引用;子查询只能返回一列";postgresql中的错误,mysql,sql,postgresql,case,Mysql,Sql,Postgresql,Case,运行此查询时,出现错误“错误:子查询必须仅返回一列”: INSERT INTO details (id, object_id, detail) ( SELECT CASE WHEN (SELECT * FROM details WHERE NOT EXISTS(SELECT 1 FROM main_base WHERE main_base.id = details.id)) THEN concat(SUBSTRING(mai

运行此查询时,出现错误“错误:子查询必须仅返回一列”:

INSERT INTO details (id, object_id, detail)
  (
    SELECT
      CASE
      WHEN (SELECT * FROM details WHERE NOT EXISTS(SELECT 1 FROM main_base WHERE main_base.id = details.id))
        THEN
          concat(SUBSTRING(main_base.id, '(\d+.\d+.)'), n.counted :: TEXT, 'A')
        ELSE
           concat( SUBSTRING (main_base.id, '(\d+.\d+.)'), n.counted :: TEXT)
        END AS id,
          main_base.object_id,
          main_base.details
    FROM main_base
    CROSS JOIN LATERAL
    generate_series(1, COALESCE ((string_to_array(main_base.id, '-')) [2] :: INT, 1)) AS n (counted)
    WHERE main_base.id LIKE '%-%' AND NOT main_base.details ~ '^\.\d+|\(\.\d+\)'
  );

我不知道出了什么事。我读过一些主题,人们有同样的问题,但仍然不知道如何解决。

我认为问题在于:

SELECT * FROM details WHERE NOT EXISTS(SELECT 1 FROM main_base WHERE main_base.id = details.id)
可以返回多行,因此会导致
WHEN
语句出现问题。它可以返回多行,因为每次满足条件时子查询都将返回1

如果要根据此集合中存在某些记录的时间触发case语句,是否可以使用:

(SELECT COUNT(*) FROM details WHERE NOT EXISTS(SELECT 1 FROM main_base WHERE main_base.id = details.id)) > 1

这可能会引发“子查询返回的行数超过1”错误。正确。多个列返回到WHEN expr。可以从描述您试图通过此查询实现的内容开始吗?因为你确实把它复杂化了。