2011-07-22 48 views
1

一個問題,我已經喜歡PostgreSQL的:在SELECT

SELECT t3 FROM tbl_join WHERE t2=3 AND t1 in (1,2,3); 

查詢和輸出是:

t3 
---- 
    1 
    1 
(2 rows) 

它給了只有兩排爲T3條目不存在。是否有可能修改SELECT查詢是這樣的:

SELECT t3||0 FROM tbl_join WHERE t2=3 AND t1 in (1,2,3); 

得到的結果類似

t3 
---- 
    1 
    1 
    0 
(3 rows) 

我的意思是,是否有可能編寫一個查詢,其中一個可以得到的輸出沒有。的行數等於no。的論點在in clause。如果條目不存在輸出應該來爲你想要一個外連接相應的輸入

+0

看來,如果你假設,t3中的值與(t1(1,2,3))中的順序相同,(1,1,0)將意味着沒有t1 = 3的值。但是,如果你不訂購你的結果集,你不知道,1,1和0屬於哪個值。 –

回答

1

一些恆定值:像

SELECT t.t3 
FROM (VALUES (1), (2), (3)) AS litvals 
    LEFT OUTER JOIN tbl_join as t 
    ON litvals.column1 = t.t1 
WHERE t.t2=3 

編輯:嗯。當沒有相應的行tbl_joinVALUES匹配,那麼t2爲NULL,這當然不等於3.你可以解決這個問題有一個子查詢:

SELECT t.t3 
FROM (VALUES (1), (2), (3)) AS litvals 
    LEFT OUTER JOIN (SELECT * FROM tbl_join WHERE t2 = 3) AS t 
    ON litvals.column1 = tbl_join.t1 
+3

他們可能還需要[COALESCE](http://www.postgresql.org/docs/current/static/functions-conditional.html#AEN15541)。 –

+0

這隻給出了2行.'SELECT t3 FROM(VALUES(1),(2),(3))AS litvals JOIN tbl_join ON litvals.column1 = tbl_join.t1 WHERE t2 = 3;'我是否缺少東西 – Mayank

+0

@Mayank :是,「LEFT OUTER」 – araqnid