diff --git a/多表查询.md b/多表查询.md index 247367d..a94e55a 100644 --- a/多表查询.md +++ b/多表查询.md @@ -91,9 +91,9 @@ fsql.Select() //SELECT a.`Id`, a.`Title`, a.`Clicks`, a.`CreateTime`, a.`CategoryId` //FROM `Topic` a //WHERE (exists(SELECT 1 -// FROM `Topic` b -// WHERE (b.`Id` = a.`Id`) -// limit 0,1)) +// FROM `Topic` b +// WHERE (b.`Id` = a.`Id`) +// limit 0,1)) ``` > 提示:由于子查询的实体类与上层相同,使用 As("b") 指明别名,以便区分 @@ -107,10 +107,23 @@ fsql.Select() //SELECT a.`Id`, a.`Title`, a.`Clicks`, a.`CreateTime`, a.`CategoryId` //FROM `Topic` a //WHERE (((a.`Id`) in (SELECT b.`Id` -// FROM `Topic` b))) +// FROM `Topic` b))) ``` -## 6、子表First/Count/Sum/Max/Min/Avg +## 6、子表Join + +```csharp +fsql.Select() + .Where(a => string.Join(",", fsql.Select().ToList(b => b.Id)) + .ToList(); +//SELECT (SELECT group_concat(b.`name` separator ',') +// FROM `StringJoin01` b) as1 +//FROM `Topic` a +``` + +> 提示:子查询 string.Join + ToList 适配了 sqlserver/pgsql/oracle/mysql/sqlite/达梦/金仓 [#405](https://github.com/dotnetcore/FreeSql/issues/405) + +## 7、子表First/Count/Sum/Max/Min/Avg ```csharp fsql.Select().ToList(a => new { all = a, @@ -123,7 +136,7 @@ fsql.Select().ToList(a => new { }); ``` -## 7、AsSelect +## 8、AsSelect ```csharp fsql.Select() @@ -141,7 +154,7 @@ fsql.Select() 将集合属性快速转换为 ISelect 进行子查询操作。 -## 8、WhereCascade +## 9、WhereCascade 多表查询时,像isdeleted每个表都给条件,挺麻烦的。WhereCascade使用后生成sql时,所有表都附上这个条件。 diff --git a/更新日志.md b/更新日志.md index 45f0b0b..e0a7c89 100644 --- a/更新日志.md +++ b/更新日志.md @@ -5,7 +5,7 @@ - **增加 DbContext/Repository BeginEdit/EndEdit 批量编辑数据的方法 #397;** - **增加 FreeSql.Provider.SqlServerForSystem 使用 System.Data.SqlClient.dll 兼容更多运行平台 #401 #398 #395 #392 #391;** -- 增加 SqlServer lambda 表达式树解析子查询 ToList + string.Join() 产生 类似 group_concat 的效果;#405 +- 增加 lambda 表达式树解析子查询 ToList + string.Join() 产生 类似 group_concat 的效果(适配了 sqlserver/pgsql/oracle/mysql/sqlite/达梦/金仓);#405 - 修复 fsql.InsertOrUpdate 在同线程事务模式内使用的 bug #402; - 修复 fsql.Ado.ExecuteDataTable 当记录不存在时,未返回 Columns 设置 #403; - 修复 IInsert/IUpdate BatchProgress 异步执行不生效的 bug;