我在一个列中有一个表,其中包含其他表的名称。
所以现在我需要检查这些表在第一行中是否具有特定值。
之后,如果该表具有该值,则可以将该表显示为第一个表中的一行;例如在MAIN TABLE上,我放置了其他表的所有名称。
我希望如果表在第一行中的值为1,它将被返回。
表的数量总是变化的,其他表中的第一个值也变化
示例就是这样
MAIN TABLE
------------
| table_name|
| a |
| b |
| c |
| d |
a
--------
| value|
--------
| 0 |
b
--------
| value|
--------
| 1 |
c
--------
| value|
--------
| 1 |
d
--------
| value|
--------
| 0 |
RESULT EXPECTED
------------
| table_name|
| b |
| c |
答案 0 :(得分:0)
假定主表名为“名称”,其他表的名称为“ a”,“ b”,...(如您的问题),并且命名a,b,c,...中的值列'myvalue',您将通过以下函数获得结果:
create or replace function have_ones(tcTableName text)
returns boolean as
$body$
declare
lnResult int;
begin
lnResult := 0;
execute ('select count(*) from ' || tcTableName || ' where myvalue = 1;') into lnResult;
return ( lnResult > 0 );
end;
$body$
language plpgsql volatile;
函数使用动态创建的查询,该查询取决于表名。
定义此功能后,您将在以下查询中获得结果:
select table_name from names where have_ones(names.table_name);