diff --git a/docs/ChangelogCN.md b/docs/ChangelogCN.md
index 1ea3f748..246fa35d 100644
--- a/docs/ChangelogCN.md
+++ b/docs/ChangelogCN.md
@@ -4,7 +4,7 @@
新特性:
* 移动xorm cmd [github.com/go-xorm/cmd](github.com/go-xorm/cmd)
* 在重构一般DB操作核心库 [github.com/go-xorm/core](https://github.com/go-xorm/core)
- * 移动测试github.com/复XORM/测试 [github.com/go-xorm/tests](github.com/go-xorm/tests)
+ * 移动测试github.com/XORM/tests [github.com/go-xorm/tests](github.com/go-xorm/tests)
改进:
* Prepared statement 缓存
diff --git a/docs/QuickStart.md b/docs/QuickStart.md
index 89ed0fe2..b9e12f40 100644
--- a/docs/QuickStart.md
+++ b/docs/QuickStart.md
@@ -693,7 +693,7 @@ Please visit [https://github.com/go-xorm/xorm/tree/master/examples](https://gith
## 15.FAQ
-1.How the xorm tag use both with json?
+* How the xorm tag use both with json?
Use space.
@@ -702,3 +702,38 @@ type User struct {
Name string `json:"name" xorm:"name"`
}
```
+
+* Does xorm support composite primary key?
+
+ Yes. You can use pk tag. All fields have tag will as one primary key by fields order on struct. When use, you can use xorm.PK{1, 2}. For example: `Id(xorm.PK{1, 2})`.
+
+* How to use join?
+
+ We can use Join() and extends tag to do join operation. For example:
+
+ type Userinfo struct {
+ Id int64
+ Name string
+ DetailId int64
+ }
+
+ type Userdetail struct {
+ Id int64
+ Gender int
+ }
+
+ type User struct {
+ Userinfo `xorm:"extends"`
+ Userdetail `xorm:"extends"`
+ }
+
+ var users = make([]User, 0)
+ err := engine.Table(&Userinfo{}).Join("LEFT", "userdetail", "userinfo.detail_id = userdetail.id").Find(&users)
+
+ //assert(User.Userinfo.Id != 0 && User.Userdetail.Id != 0)
+
+Of course, If join statment is very long, you could directly use Sql():
+
+ err := engine.Sql("select * from userinfo, userdetail where userinfo.detail_id = userdetail.id").Find(&users)
+
+ //assert(User.Userinfo.Id != 0 && User.Userdetail.Id != 0)
diff --git a/docs/QuickStartCN.md b/docs/QuickStartCN.md
index 9af08f1d..ac06c193 100644
--- a/docs/QuickStartCN.md
+++ b/docs/QuickStartCN.md
@@ -830,6 +830,32 @@ money float64 `xorm:"Numeric"`
答:支持。在定义时,如果有多个字段标记了pk,则这些字段自动成为复合主键,顺序为在struct中出现的顺序。在使用Id方法时,可以用`Id(xorm.PK{1, 2})`的方式来用。
+* xorm如何使用Join?
+
+答:一般我们配合Join()和extends标记来进行,比如我们要对两个表进行Join操作,我们可以这样:
+
+ type Userinfo struct {
+ Id int64
+ Name string
+ DetailId int64
+ }
+
+ type Userdetail struct {
+ Id int64
+ Gender int
+ }
+
+ type User struct {
+ Userinfo `xorm:"extends"`
+ Userdetail `xorm:"extends"`
+ }
+
+ var users = make([]User, 0)
+ err := engine.Table(&Userinfo{}).Join("LEFT", "userdetail", "userinfo.detail_id = userdetail.id").Find(&users)
+
+当然,如果Join语句比较复杂,我们也可以直接用Sql函数
+
+ err := engine.Sql("select * from userinfo, userdetail where userinfo.detail_id = userdetail.id").Find(&users)
## 17.讨论