2013-08-26 51 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>