如果符合某些标准,postgres会计算两次记录

时间:2010-05-30 15:50:12

标签: postgresql syntax select

我认为下面的查询自然会做我解释的,但显然不是......

我的表格如下:

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

3 个答案:

答案 0 :(得分:4)

您的查询不起作用,因为每行只返回一次,无论它是否匹配一个或两个条件。要获得您想要的内容,请使用两个查询并使用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 :(得分:-1)

你可以沿着这些方向尝试UNION:

“SELECT id FROM mytable WHERE(g ='M')UNION SELECT id FROM mytable WHERE(g2 ='M')”

希望这有帮助,马丁

答案 2 :(得分:-1)

SELECT id FROM mytable WHERE g = 'M'
UNION
SELECT id FROM mytable WHERE g2 = 'M'