diff --git a/session_find_test.go b/session_find_test.go index 991fadf2..71116472 100644 --- a/session_find_test.go +++ b/session_find_test.go @@ -790,8 +790,12 @@ func TestFindJoin(t *testing.T) { DeviceId int64 } + type Order struct { + Id int64 + } + assert.NoError(t, prepareEngine()) - assertSync(t, new(SceneItem), new(DeviceUserPrivrels)) + assertSync(t, new(SceneItem), new(DeviceUserPrivrels), new(Order)) var scenes []SceneItem err := testEngine.Join("LEFT OUTER", "device_user_privrels", "device_user_privrels.device_id=scene_item.device_id"). @@ -802,6 +806,10 @@ func TestFindJoin(t *testing.T) { err = testEngine.Join("LEFT OUTER", new(DeviceUserPrivrels), "device_user_privrels.device_id=scene_item.device_id"). Where("scene_item.type=?", 3).Or("device_user_privrels.user_id=?", 339).Find(&scenes) assert.NoError(t, err) + + scenes = make([]SceneItem, 0) + err = testEngine.Join("INNER", "order", "`scene_item`.device_id=`order`.id").Find(&scenes) + assert.NoError(t, err) } func TestJoinFindLimit(t *testing.T) { diff --git a/statement.go b/statement.go index 87cab7cc..671a699e 100644 --- a/statement.go +++ b/statement.go @@ -765,6 +765,11 @@ func (statement *Statement) Join(joinOP string, tablename interface{}, condition statement.joinArgs = append(statement.joinArgs, subQueryArgs...) default: tbName := statement.Engine.TableName(tablename, true) + if !isSubQuery(tbName) { + var buf strings.Builder + statement.Engine.QuoteTo(&buf, tbName) + tbName = buf.String() + } fmt.Fprintf(&buf, "%s ON %v", tbName, condition) }