从一个表中查询一个值,然后将该值用作表来查询子值

时间:2018-11-22 18:28:51

标签: database postgresql

我在PostgreSQL中有多个表,名为abdata_X_XX,其中X可以是任何值。
data_X_XX包含以下列:azimuthskewtilt
b包含以下列:a_iddata_table_nameserial_nodata_table_name将包含表data_X_XX的名称。
a包含以下列:idnamelocation
现在,我要从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);这一切都会返回错误。

我在做什么错?任何帮助将不胜感激。

1 个答案:

答案 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;

用实际的数据类型替换???