是否可以在PostgreSQL中進行選擇性查詢,根據已選擇的行的值選擇不同的表/列?Selective PostgreSQL數據庫查詢
基本上,我有一個表格,其中每行包含一個由兩到五個字符組成的序列(tbl_roots
),可選地帶有一個長度字段,該長度字段指定該序列應該包含多少個字符(它的意思是一旦我找出更好的方法,即通過計算序列的長度)。
有含圖案(tbl_patterns_biliteral
,tbl_patterns_triliteral
,...等)四個表,其中的每一個對應於一個root_length
,並用於通過提供用於每個的標識符以同步模式表的第五表(tbl_patterns
) tbl_patterns_biliteral
中的行排列#2對應於tbl_patterns_triliteral
中的同一行。這六個模式表受到限制,使得tbl_patterns_(bi|tri|quadri|quinqui)literal
中的任何行都不會存在tbl_patterns
中不存在的pattern_id
。
每個模式表有九個其他列對應於一個標識符(root_form
)。
數據庫(tbl_words
)最後一個表,包含每個主要的表(word_id
,root_id
,pattern_id
,root_form
,word
)的列。每個單詞被定義爲一個特定長度和形式的根,拼接成一個特定的模式。拼接相對簡單:translate(pattern, '12345', array_to_string(root, '')) as word_combined
完成這項工作。
現在,我想要做的是根據tbl_roots
中的序列長度選擇適當的模式表,然後根據root_form
的值在模式表中選擇適當的列。
這怎麼辦?它可以組合成一個簡單的查詢,還是我需要做多個通行證?一旦我建立了這個查詢,我就可以將它編碼成一個可以搜索我的數據庫的PHP腳本。
編輯
下面是一些樣本數據(它實際上是我使用的時刻數據)和一些更多的解釋爲系統是如何工作的:https://gist.github.com/823609
它比它出現在概念上更簡單首先,特別是如果你把它看作一個座標系。
你可以發表DDL和一些樣本數據嗎?我非常確定這可以完成,但不像你看待它。 – 2011-02-12 07:18:17
示例數據最好以INSERT語句發佈。控制檯輸出不能很容易地用於快速設置測試環境 – 2011-02-12 09:28:09
我已經更新了Gist,因此它應該包含正確的語句,但我沒有測試它們,所以我不確定。 – Robbie 2011-02-12 10:55:37