【发布时间】:2017-07-24 23:52:36
【问题描述】:
我有一个看起来像这样的表(简化):
CREATE TABLE IF NOT EXISTS records (
user_id uuid NOT NULL
ts timestamptz NOT NULL,
op_type text NOT NULL,
PRIMARY KEY (user_id, ts, op_type)
);
出于实际目的,我无法更改主键。
我正在尝试编写一个查询,以获取给定 user_id 的所有 records,其中,对于特定记录,ts 和 op_type 与排除数组不匹配。
我不太确定正确的 postgres 术语,所以让我看看这个例子是否让我的约束更清晰:
这个数组看起来像这样(在 JavaScript 中):
var excludes = [
[DATE1, 'OP1'],
[DATE2, 'OP2']
]
如果对于给定的用户 ID,数据库中有如下所示的行:
ts | op_type
----------------------------+-------------
DATE1 | OP1
DATE2 | OP2
DATE1 | OP3
DATE2 | OP1
OTHER DATE | OP1
OTHER DATE | OP2
然后,使用上面的excludes,我想运行一个查询,返回除前两行之外的所有内容,因为它们完全匹配。
我的尝试是这样做:
client.query(`
SELECT * FROM records
WHERE
user_id = $1
AND (ts, op_type) NOT IN ($2)
`, [userId, excluding])
但我得到“未实现匿名复合类型的输入”。我不确定如何正确输入excluding,或者这是否是正确的方法。
【问题讨论】:
-
没有
$0这样的东西,变量以$1开头。 -
问题中的错字,谢谢指出
标签: sql postgresql node-postgres