我在PostgreSQL中有多个表,名为a
,b
和data_X_XX
,其中X
可以是任何值。
data_X_XX
包含以下列:azimuth
,skew
和tilt
。
b
包含以下列:a_id
,data_table_name
,serial_no
。 data_table_name
将包含表data_X_XX
的名称。
a
包含以下列:id
,name
,location
。
现在,我要从azimuth
中选择data_X_XX
的值,并将其显示为:
a.name, b.serial_no, data_X_XX.azimuth
我尝试过select azimuth from b.data_table_name where b.data_table_name='data_X_XX'
和select azimuth from (select data_table_name from b)
;这一切都会返回错误。
我在做什么错?任何帮助将不胜感激。
答案 0 :(得分:0)
由于data_x_xx
的表名是动态的,因此必须使用动态sql。为了能够以表结构返回它,我将其放在函数中:
CREATE OR REPLACE FUNCTION my_func()
RETURNS TABLE (name TEXT, serial_no ???, azimuth ???) AS
$$
BEGIN
RETURN QUERY EXECUTE
'SELECT a.name, b.serial_no, (SELECT azimuth FROM ' || b.data_table_name || ')
FROM a
JOIN b ON a.id = b.a_id';
END
$$
LANGUAGE plpgsql STABLE;
用实际的数据类型替换???
。