2013-08-26 22 views
0

假设你有许多具有相同列和某种命名约定的Postgresql表。加入带命名约定的Postgresql表

tablename_descriptor:  tablename_anotherdescriptor:  tablename_descriptor3: 
ID   VALUE    ID   VALUE    ID  VALUE 
1   val1    1   val4     1   val7 
2   val2    2   val5     2   val8 
3   val3    3   val6     3   val9 

是否有方法可以连接所有名称以“tablename”开头的表格?给出结果

tablename: 
ID  VALUE 
1  val1 
2  val2 
3  val3 
4  val4 
5  val5 
6  val6 
7  val7 
8  val8 
9  val9 
+0

你可以写为 –

+0

动态SQL,我不认为这是它应该是如何工作的,也许,如果你有这些表的实际情况,我可以试试就知道你真正打算。由于这个例子刚刚表明你的模式不太好,除了这些特性之外,你可以制作一个表而不是两个或更多。 – ksugiarto

+0

第一个模式是给我的,第二个模式是我的程序所需的模式。像罗马说的那样,必须有动态的SQL来完成这一点。我只是不知道该怎么做。 – user2461526

回答

0

下面是一些动态SQL,其中可以执行获得UNION ALL“各表D一起的结果。

SELECT string_agg('select row_number() over() as rn,value from ' || tablename,' union all ') 
FROM pg_catalog.pg_tables 
WHERE schemaname = 'public' 
AND tablename ~* E'tablename\\_descriptor'; 

1)。 row_number()只是为了给你一个ID(或者你可以提供一个序列等)。 2)。如果您正在使用命令行工作,则可以在一个psql会话中执行此查询并将其传递给另一个以获取生成的查询的结果。

例如,

psql -U <youruser> -d <yourdb> -qtAc "<the query>" | psql -U <youruser> -d <yourdb>