我以为下面的问题自然会像我解释的那样,但显然不是。。。
我的桌子是这样的:
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/