我以为下面的问题自然会像我解释的那样,但显然不是。。。
我的桌子是这样的:

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

我试图得到一个id,其中g或g2的值等于'm'。。。但是,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

最佳答案

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

关于postgresql - 如果符合某些条件,postgres将对一条记录计数两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2939307/

10-12 17:35
查看更多