2010-05-30 39 views
1

我認爲下面的查詢自然會做什麼,我解釋,但顯然不是一個紀錄......Postgres的計算,如果兩次符合一定的標準

我的表看起來像這樣:

id | name | g | partner | g2 
1 | John | M | Sam | M 
2 | Devon | M | Mike | M 
3 | Kurt | M | Susan | F 
4 | Stacy | F | Bob | M 
5 | Rosa | F | Rita | F 

我試圖獲得g或g2值等於'M'的id ...但是,g和g2值均爲'M'的記錄應返回兩行,而不是1.

因此,在上面的示例數據中,我試圖返回:

$q = pg_query("SELECT id FROM mytable WHERE (g = 'M' OR g2 = 'M')"); 

1 
1 
2 
2 
3 
4 

但是,它總是返回:

1 
2 
3 
4 

回答

4

你QUER y不起作用,因爲每行只返回一次,而不管它是匹配一個還是兩個條件。爲了得到你想要使用兩個查詢和使用UNION ALL的結果結合起來什麼:

SELECT id FROM mytable WHERE g = 'M' 
UNION ALL 
SELECT id FROM mytable WHERE g2 = 'M' 
ORDER BY id 

結果:

1 
1 
2 
2 
3 
4 
-1

,你可以嘗試使用UNION沿着這些線路:

「SELECT ID FROM mytable的WHERE(G = 'M')UNION SELECT ID FROM mytable的WHERE (G2 = 'M')」

希望這會有所幫助,馬丁

+1

'S/UNION/UNION ALL /','平原是UNION'相當於'選擇DISTINCT' – 2010-05-30 16:17:38

-1
SELECT id FROM mytable WHERE g = 'M' 
UNION 
SELECT id FROM mytable WHERE g2 = 'M' 
+2

這是錯誤的,請參閱我的評論以使用304582的答案 – 2010-05-30 16:18:37