我正在尝试使用该ANY
子句删除我的 Postgress 数据库中的某些行。
这是结构 -
---- TABLE A -----
-------------------
rId UUID NOT NULL,
oId UUID NOT NULL,
eId UUID NOT NULL,
--- <other fields>
PRIMARY KEY (rId, oId, eId),
CONSTRAINT fk_r FOREIGN KEY (rId) REFERENCES another_table(rId),
CONSTRAINT fk_eo FOREIGN KEY (oId, eId) REFERENCES some_other_table (oId, eId)
假设此表具有以下行 -
| rId | oId | eId |
-----------------------
| 1 | abc | pqr |
| 1 | abc | xyz |
| 1 | abc | utd |
我想从该表中删除所有具有rId = 1
, oId = abc
AND [ eId != pqr
AND eid != xyz
]的行
我写了下面的查询 -
DELETE FROM TABLE_A
WHERE rId = 1
AND oId = abc
AND eId != ANY (array['pqr'::uuid, 'xyz'::uuid]);
问题是这不起作用。eId = pqr Or eId = xyz
已经被删除的两行。我该如何纠正?
一个接一个地传递它们不是一种选择(我得到了一个slice
作为eId
参数传递给运行此查询的 go 函数的参数)。
像下面的东西 -
func queryToDelete(req someReq, eIds ...string) *pgx.Batch {
batch := &pgx.Batch{}
deleteQuery := `
DELETE
FROM table_a
WHERE rId = $1
AND oId = $2
AND eId != ANY($3);
`
batch.Queue(deleteQuery, req.rId, req.oId, eIds)
return batch
}
请忽略 , 1
,在此示例abc
中pqr
不是 UUID。为了简洁起见,我保持这种方式。