亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

多列 IN/ANY postgres 查詢

多列 IN/ANY postgres 查詢

Go
POPMUISE 2022-10-17 15:51:01
示例表架構:create table t1(  col1 varchar(20),  col2 varchar(20));要求:獲取與數組中存在的任何元組(col1,col2)匹配的行。SQL:select * from t1 where (col1, col2) in (('c11', 'c12'), ('c21', 'c22'));我想使用帶有“github.com/lib/pq”驅動程序的“database/sql”包在Go中編寫這個查詢,這就是我面臨的問題。我可以輕松地為單列 IN/ANY 查詢執行此操作。例如,以下查詢select * from t1 where col1 in ('c11', 'c21');可以通過以下代碼片段來實現:args := []string{"c11", "c21}conn.Exec(`select * from t1 where col1 = any($1)`, pq.Array(args))但是,我不能對多列查詢使用類似的方法。我嘗試將 等作為參數傳遞pq.Array([][]string),pq.Array([]*pq.StringArray)但它們不起作用,并獲取以下錯誤:input of anonymous composite types is not implemented將不勝感激任何幫助。
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

您可以執行以下操作:


args := [][]string{{"c11","c21"},{"c21","c22"}}

params := make([]interface{}, len(args)*2)

tuples := make([]string, len(args))

for i := range args {

    params[i*2] = args[i][0]

    params[i*2+1] = args[i][1]

    tuples[i] = fmt.Sprintf("($%d,$%d)", i*2+1,i*2+2)

}

invals := "(" + strings.Join(tuples, ",")) + ")"

conn.Exec("SELECT * FROM t1 WHERE (col1,col2) IN " + invals, params...)

對于兩列元組,您應該能夠執行以下操作:


conn.Exec(`SELECT * FROM t1 WHERE (col1,col2) IN (

    SELECT * FROM json_each_text(json_object($1::text[]))

)`, pq.Array([][]string{{"c11","c21"},{"c21","c22"}}))


查看完整回答
反對 回復 2022-10-17
  • 1 回答
  • 0 關注
  • 228 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號