子查询中作为变量的postgresql列名 表1 id col1 col2 col3。。。 表2 col\u id col\u name 3432 col1 5342 col2 6756 col3
现在我想生成如下表3: id列名称列值列id 请注意col1,col2,col3。。。这些都不正常。因此,我必须查询表2以获取col_id(我认为pivot在这里不起作用)子查询中作为变量的postgresql列名 表1 id col1 col2 col3。。。 表2 col\u id col\u name 3432 col1 5342 col2 6756 col3,postgresql,Postgresql,现在我想生成如下表3: id列名称列值列id 请注意col1,col2,col3。。。这些都不正常。因此,我必须查询表2以获取col_id(我认为pivot在这里不起作用) 如何在SQL中执行此操作?您似乎需要这样的选择: table1 id col1 col2 col3... table2 col_id col_name 3432 col1 5342 col2 6756 col3 您也可以创建一个函数,尽管在实践中这会比较慢: SELECT t
如何在SQL中执行此操作?您似乎需要这样的选择: table1 id col1 col2 col3... table2 col_id col_name 3432 col1 5342 col2 6756 col3 您也可以创建一个函数,尽管在实践中这会比较慢:
SELECT t2.id,
CASE
WHEN t2.col_name='col1' THEN t1.col1
WHEN t2.col_name='col2' THEN t1.col2
WHEN t2.col_name='col2' THEN t1.col2
-- ... more columns
ELSE NULL
END
FROM table2 t2 LEFT JOIN table2 t1 ON t2.col_id = t1.id
很不清楚,这个问题是什么。请提出一个明确的问题。对不起。打字错误。应生成表3。更正了,是的。但是表1有数百列。我要为“何时”打几百行字吗?我是一个开发人员,但不是数据库管理员。也许我可以输出表并编写python来完成这项工作。使用脚本生成重复的SQL是完全合适的。我添加了一个函数示例,用于按名称提取列的值。当vs函数调用时,在一个很长的用例之间进行基准测试是很有趣的,但是由于为每一行规划和执行一个单独的查询,它几乎肯定会变慢。
CREATE OR REPLACE FUNCTION table1_col(id integer, name text) RETURNS text as $$
DECLARE
col_val text;
BEGIN
EXECUTE format('SELECT %s FROM table1 WHERE id=$1', name)
INTO col_val
USING id;
RETURN col_val;
END;
$$ LANGUAGE plpgsql;
SELECT table1_col(col_id,col_name) FROM table2;