如何从一个基于多个表的表中获取值

时间:2018-07-11 22:18:22

标签: postgresql-9.5

我在一个列中有一个表,其中包含其他表的名称。

所以现在我需要检查这些表在第一行中是否具有特定值。

之后,如果该表具有该值,则可以将该表显示为第一个表中的一行;例如在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         |  

1 个答案:

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