【问题标题】:sqlx structscan join querysqlx structscan 连接查询
【发布时间】:2016-09-28 20:35:37
【问题描述】:

我是新来的 sqlx,我想知道它是否可以在一个查询中 strutscan a master -> detail join 子句。一个病人有很多情节,所以我想查询所有病人并在每个病人结构中嵌入一个情节数组

类似这样的:

type Episode struct {
        EpisodeID int    `db:"episode_id"`
        PatientID int    `db:"patient_id"`
        Status    string `db:"status"`
    }

    type Patient struct {
        PatientID    int            `db:"patient_id"`
        FirstName    string         `db:"first_name"`
        MiddleName   sql.NullString `db:"middle_name"`
        LastName     string         `db:"last_name"`
        Episodes     []Episode
    }

    query := `SELECT 
    mr_patients.patient_id, 
    mr_patients.first_name, 
    mr_patients.middle_name, 
    mr_patients.last_name, 
    mr_episode_statuses.status, 
    mr_episodes.episode_id, 
    mr_episodes.created_at 
    FROM mr_patients 
    INNER JOIN mr_episodes ON mr_patients.patient_id = mr_episodes.patient_id 
    INNER JOIN mr_episode_statuses ON mr_episodes.status_id = mr_episode_statuses.status_id
    ORDER BY mr_patients.patient_id, mr_episodes.episode_id`

    rows, err := db.Queryx(query)

    if err != nil {
        log.Fatal(err)
    }

    var patients []Patient

    for rows.Next() {
        var p Patient
        err = rows.StructScan(&p)
        if err != nil {
            log.Fatalln(err)
        } else {
            patients = append(patients, p)
        }
    }

谢谢。

【问题讨论】:

标签: go sqlx


【解决方案1】:

由于 database/sql 或 sqlx 不是对象关系映射器,并且不知道如何“填充”您的类型 []Episodes,因此它不会起作用。 sqlx 可以使用“structName.fieldName”语法在父结构中分配单个结构字段,仅此而已。它不能占用所有行,知道什么是什么并将所有Episodes 分配给正确的Patient。为此,您需要一个 ORM。

【讨论】:

    猜你喜欢
    • 2021-09-18
    • 2017-12-13
    • 2019-03-08
    • 2017-03-26
    • 2012-05-10
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多