2016-09-12 54 views
0

我想通过以下方式使用?(我用它在Golang生成查询,但现在看来似乎不是去依赖):PostgreSQL“?”参数占位符不适合工作“和”

WITH Tmp(name, enabled) AS (
    VALUES(?, ?),(?, ?) 
) 
UPDATE table_groups 
    SET enabled = (SELECT enabled 
        FROM Tmp 
        WHERE table_groups.name=Tmp.name) 
WHERE table_groups.name IN (SELECT name FROM Tmp) 

越来越:

syntax error at or near "," 

如果我用具体的值上面的语句代替?,一切工作正常。使用?WITH有什么问题,我将如何解决它?谢谢。

+1

无关:你不需要标量子查询。 – wildplasser

+2

我认为Postgres只适用于编号占位符,即'$ 1'。 –

+1

你用什么驱动程序包来使用pgsql?你知道,Go不包括其标准库中的任何RDBMS的驱动程序,所以必须告诉我们你在做什么。如果您使用'github.com/lib/pq',[文档](https://godoc.org/github.com/lib/pq)只提及'$ n''样式的参数,如@ Ainar- G建议。 IOW,查询占位符的格式是特定于驱动程序的,而不是通用的。 – kostix

回答

0

Go不支持此框。

您可以使用jmoiron/sqlx,如果你想使用这个SQLX功能

例如(从docs):

var levels = []int{4, 6, 7} 
query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels) 

// sqlx.In returns queries with the `?` bindvar, we can rebind it for our backend 
query = db.Rebind(query) 
rows, err := db.Query(query, args...)