【发布时间】:2021-07-09 18:11:49
【问题描述】:
我找不到正确的语法来向 epgsql:equery 函数提供值列表以在 sql where in 子句中使用。我用谷歌搜索并尝试了几种变体,但都失败了。我的一些尝试如下:
L = [1, 2, 3],
epgsql:equery(Conn, "SELECT $1::integer[]", [L]), % this works
epgsql:equery(Conn, "SELECT * FROM users WHERE id IN $1", [L]), % doesn't work
epgsql:equery(Conn, "SELECT * FROM users WHERE id IN ($1)", [L]), % doesn't work
epgsql:equery(Conn, "SELECT * FROM users WHERE id IN ($1::integer[])", [L]), % doesn't work
epgsql:equery(Conn, "SELECT * FROM users WHERE id IN unnest($1::integer[])", [L]), % doesn't work
这样做的正确方法是什么?
【问题讨论】:
-
绑定变量是数据本身,因此使用
IN( $1 )您只传递一个值(在您的情况下为列表类型)。所以从数据库的角度来看它是无效的。您可以尝试execute_batch或尝试传递一个数组并用= any包装它,就像回答here 一样。 -
@astentx 嘿,谢谢,它成功了!正确的查询是 epgsql:equery(Conn, "SELECT * FROM users WHERE id = ANY($1::integer[]), [L])。您能否提供您的评论作为答案,以便我接受?
标签: sql postgresql erlang