postgresql - 如果满足某些条件,postgres 会计算一条记录两次

标签 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

最佳答案

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

相关文章:

postgresql - pgAdmin 和 PostgreSQL : can't connect to server

postgresql - jsonb类型的plv8存储过程

mysql - SELECT * 真的比只选择需要的列花费更多的时间吗?

windows - Windows 上的 PostgreSQL : is there a default password?

node.js - 批量 postgres 插入,其中时间戳具有通过 sequelize 设置的空约束

haskell - 在输入 `='上解析错误?

vim - 为 pFUnit 测试框架扩展 vim Fortran 语法文件

c++ - __declspec(align) 用于多个声明

mysql - 计算 MySQL 列中子字符串的出现次数

MySQL 选择与我的数据匹配的列