1 回答

TA貢獻1831條經驗 獲得超10個贊
SQL,這里的左連接也將返回沒有關聯的 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
如果您只關心有 bar 的 foo,那么實際上不需要連接。
select
m.foo_id
, array_agg(m.bar_id)
from foo_bar_members m
where m.foo_id = $1
group by m.foo_id
執行代碼:
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是一個返回實現sql.Scanner和driver.Valuer接口的值的函數,并且該實現知道如何將 postgres 數組掃描到 go 切片中或將 go 切片轉換為 postgres 數組。
我不熟悉,所以它本身可能提供了一些允許您掃描數組的功能,因此可能沒有必要sqlx使用。pq.Array也許更了解的人最終會提供他們的解決方案版本。
- 1 回答
- 0 關注
- 213 瀏覽
添加回答
舉報