golangのxormでJoinしたデータを取得する場合の注意点を書いてみます。(oracleは関係ないかな。)
同じカラム名
joinしたデータを取得する際に、xormのextendsオプションで取得する場合に、同じカラム名がある場合、指定する構造体により取得できるデータが変わります。
type USERS struct { ID int64 `xorm:"ID"` NAME string `xorm:"NAME"` MEMO string `xorm:"MEMO"` } type USERS_DATA struct { ID int64 `xorm:"ID"` USERS_ID int64 `xorm:"USERS_ID"` MEMO string `xorm:"MEMO"` } type USERS_JOIN_1 struct { USERS USERS `xorm:"extends"` USERS_DATA USERS_DATA `xorm:"extends"` } type USERS_JOIN_2 struct { USERS_DATA USERS_DATA `xorm:"extends"` USERS USERS `xorm:"extends"` }
m := USERS_JOIN_1{} SqlHandler.Table("USERS"). Join("INNER", "USERS_DATA", "USERS.ID = USERS_DATA.USERS_ID"). Find(&m)
m := USERS_JOIN_2{} SqlHandler.Table("USERS"). Join("INNER", "USERS_DATA", "USERS.ID = USERS_DATA.USERS_ID"). Find(&m)
join1.goとjoin2.goは取得した内容を格納する構造体が違うだけですが、これだけで期待している取得データが変わってきます。
正解はちゃんと上から設定をする必要があるということです。
join2.goの場合に、USERS_DATAのパラメータにUSERSのMEMOが入っている状態になります。
プログラムする際には、取得する構造体にも気にする必要がありますね。
じゃあ、頑張りましょう。