2013-10-25 130 views
0

所以我有一個表(t1)有消息和thread_id。每個線程ID對應於一個對話。我對消息中的術語運行查詢,現在我想根據消息查詢的結果重新查詢t1。我不能做一個嵌套的,因爲最終的結果應該是從原來的t1。重述:我希望所有包含特定單詞的對話。這是在postgresql 9.1中。基於嵌套查詢結果的查詢表

+0

什麼版本的Postgres您使用的是? –

+1

沒有看到你的疑問,很難說出你的想法。也許你應該看看[Common table expressions](http://www.postgresql.org/docs/8.4/static/queries-with.html) –

回答

1

這與Common Table Experssions工作,這可以從8.4及以上版本:

create table test_table1 (id serial, val1 integer, val2 text); 
insert into test_table1 (val1, val2) 
select 
    v, 'test data ' || v 
from generate_series(1,10000); 


WITH 
    t1 (id, val1, val2) 
    as (
     select 
      id, val1, val2 
     from test_table1 
     order by id asc 
     limit 1000 
    ) 

    ,t1_condition (id, condition) 
    as (
     select 
      id, val1 % 5 = 0 
     from t1 
     where val1 % 3 = 0 
    ) 


select 
    t1.id, t1.val1, t1.val2, 
    t1_condition.condition 
from t1 
left join t1_condition 
on t1.id = t1_condition.id 
+0

CTE是正確答案(+1),但是't1_condition.condition '在這個例子中沒有太大意義 - 根據定義,它總是「TRUE」。 –

+0

@ErwinBrandstetter你是對的。我編輯刪除where子句中的%5 = 0。但是,我確實希望示例中的子查詢不要僅返回完整的原始表,因爲否則,您可以在原始選擇中執行條件測試。 –