1 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
SQL,這里的左連接也將返回沒有關(guān)聯(lián)的 bar 的 foos。
select
foo.id
, array_agg(bar.id)
from foo
left join foo_bar_members m on m.foo_id = foo.id
where foo.id = $1
group by foo.id
如果您只關(guān)心有 bar 的 foo,那么實(shí)際上不需要連接。
select
m.foo_id
, array_agg(m.bar_id)
from foo_bar_members m
where m.foo_id = $1
group by m.foo_id
執(zhí)行代碼:
const sql = "<one of the queries from above>"
f := new(Foo)
if err := db.QueryRow(sql, 123).Scan(&f.ID, pq.Array(&f.BarIDs)); err != nil {
return err
}
pq.Array是一個(gè)返回實(shí)現(xiàn)sql.Scanner和driver.Valuer接口的值的函數(shù),并且該實(shí)現(xiàn)知道如何將 postgres 數(shù)組掃描到 go 切片中或?qū)?go 切片轉(zhuǎn)換為 postgres 數(shù)組。
我不熟悉,所以它本身可能提供了一些允許您掃描數(shù)組的功能,因此可能沒有必要sqlx使用。pq.Array也許更了解的人最終會(huì)提供他們的解決方案版本。
- 1 回答
- 0 關(guān)注
- 219 瀏覽
添加回答
舉報(bào)