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。可以从描述您试图通过此查询实现的内容开始吗?因为你确实把它复杂化了。