DataSet多表關聯實現本地資料複雜的查詢
Code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> DataSet ds = new DataSet();
//提取第一個表 放在ds中
dp.CommandText = "SELECT * FROM ss_RolesInAction";
ds.Tables.Add(dp.ExecuteDataTable("ss_RolesInAction"));
//提取第二個表 放在ds中
dp.CommandText = "SELECT * FROM ss_Action";
ds.Tables.Add(dp.ExecuteDataTable("ss_Action"));
//提取第三個表 放在ds中
dp.CommandText = "SELECT * FROM as_SiteMap";
ds.Tables.Add(dp.ExecuteDataTable("as_SiteMap"));
//建立關係 ss_Action.FID = ss_RolesInAction.FActionID ,ss_RolesInAction.FActionID為外來鍵
ds.Relations.Add("relation1", ds.Tables[1].Columns["FID"], ds.Tables[0].Columns["FActionID"]);
//建立關係 as_SiteMap.ID = ss_RolesInAction.FNodeID ,ss_RolesInAction.FNodeID 為外來鍵
ds.Relations.Add("relation2", ds.Tables[2].Columns["ID"], ds.Tables[0].Columns["FNodeID"]);
//查詢條件測試1:對父表查詢獲取子表測試
//條件為 ss_Action.FID 等於 6E7BB6B5-4DDA-4BB9-A156-71288CEF16B2 的或是 ss_RolesInAction.FActionID 等於 DB893F4E-B411-4FC0-9735-D5E9B7823083 或是 as_SiteMap.id 等於7的
//因為已經建立三個表的關係,所以,無論查詢條件是什麼 都會跟上 關係中的條件 即:
//ss_Action.FID = ss_RolesInAction.FActionID AND as_SiteMap.ID = ss_RolesInAction.FNodeID
//當我們指定的查詢條件為空時會 根據 關聯關係查詢 以下條件中的 完整關聯關係是這樣的
//(ss_Action.FID = ss_RolesInAction.FActionID AND as_SiteMap.ID = ss_RolesInAction.FNodeID ) and ss_Action.FID='6E7BB6B5-4DDA-4BB9-A156-71288CEF16B2' or ss_RolesInAction.FActionID= 'DB893F4E-B411-4FC0-9735-D5E9B7823083' or as_SiteMap.id=7
DataView dv = ds.Tables[0].DefaultView;
dv.RowFilter = "parent(relation1).FID='6E7BB6B5-4DDA-4BB9-A156-71288CEF16B2' or FActionID= 'DB893F4E-B411-4FC0-9735-D5E9B7823083' or parent(relation2).id=7";
//查詢條件測試2:對子表查詢獲取父表測試
//因為子表與父表是 多對一 的關係所以 我們對子表查詢時 會返回多個值所以 使用 MAX 函式
DataView dv = ds.Tables[1].DefaultView;
dv.RowFilter = "max(child(relation1).FActionID) in ('FFD953C4-0920-4558-B87F-3A25CFB15754','FC5C91F5-45ED-4B3E-8E14-C2391B9A6B14') ";//這個查詢條件中無法關聯 as_SiteMap查詢條件 因為沒有 查詢表 as_SiteMap和返回表 ss_Action 的條件
this.GridView1.DataSource = dv;
this.GridView1.DataBind();
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> DataSet ds = new DataSet();
//提取第一個表 放在ds中
dp.CommandText = "SELECT * FROM ss_RolesInAction";
ds.Tables.Add(dp.ExecuteDataTable("ss_RolesInAction"));
//提取第二個表 放在ds中
dp.CommandText = "SELECT * FROM ss_Action";
ds.Tables.Add(dp.ExecuteDataTable("ss_Action"));
//提取第三個表 放在ds中
dp.CommandText = "SELECT * FROM as_SiteMap";
ds.Tables.Add(dp.ExecuteDataTable("as_SiteMap"));
//建立關係 ss_Action.FID = ss_RolesInAction.FActionID ,ss_RolesInAction.FActionID為外來鍵
ds.Relations.Add("relation1", ds.Tables[1].Columns["FID"], ds.Tables[0].Columns["FActionID"]);
//建立關係 as_SiteMap.ID = ss_RolesInAction.FNodeID ,ss_RolesInAction.FNodeID 為外來鍵
ds.Relations.Add("relation2", ds.Tables[2].Columns["ID"], ds.Tables[0].Columns["FNodeID"]);
//查詢條件測試1:對父表查詢獲取子表測試
//條件為 ss_Action.FID 等於 6E7BB6B5-4DDA-4BB9-A156-71288CEF16B2 的或是 ss_RolesInAction.FActionID 等於 DB893F4E-B411-4FC0-9735-D5E9B7823083 或是 as_SiteMap.id 等於7的
//因為已經建立三個表的關係,所以,無論查詢條件是什麼 都會跟上 關係中的條件 即:
//ss_Action.FID = ss_RolesInAction.FActionID AND as_SiteMap.ID = ss_RolesInAction.FNodeID
//當我們指定的查詢條件為空時會 根據 關聯關係查詢 以下條件中的 完整關聯關係是這樣的
//(ss_Action.FID = ss_RolesInAction.FActionID AND as_SiteMap.ID = ss_RolesInAction.FNodeID ) and ss_Action.FID='6E7BB6B5-4DDA-4BB9-A156-71288CEF16B2' or ss_RolesInAction.FActionID= 'DB893F4E-B411-4FC0-9735-D5E9B7823083' or as_SiteMap.id=7
DataView dv = ds.Tables[0].DefaultView;
dv.RowFilter = "parent(relation1).FID='6E7BB6B5-4DDA-4BB9-A156-71288CEF16B2' or FActionID= 'DB893F4E-B411-4FC0-9735-D5E9B7823083' or parent(relation2).id=7";
//查詢條件測試2:對子表查詢獲取父表測試
//因為子表與父表是 多對一 的關係所以 我們對子表查詢時 會返回多個值所以 使用 MAX 函式
DataView dv = ds.Tables[1].DefaultView;
dv.RowFilter = "max(child(relation1).FActionID) in ('FFD953C4-0920-4558-B87F-3A25CFB15754','FC5C91F5-45ED-4B3E-8E14-C2391B9A6B14') ";//這個查詢條件中無法關聯 as_SiteMap查詢條件 因為沒有 查詢表 as_SiteMap和返回表 ss_Action 的條件
this.GridView1.DataSource = dv;
this.GridView1.DataBind();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-557573/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JPA的多表複雜查詢
- Spring Data JPA 實現多表關聯查詢Spring
- SQL複雜查詢多表連線SQL
- MySQL多表關聯查詢MySql
- JPA多表關聯查詢
- 【EXP】備份複雜關聯查詢後的T表資料
- LinQ查詢基礎(三)LINQ to ADO.net(1)LINQ to DataSet實現複雜資料查詢
- mysql中的多表關聯查詢MySql
- thinkphp中的多表關聯查詢PHP
- Spring Data Jpa 複雜查詢總結 (多表關聯 以及 自定義分頁 )Spring
- 實現多表關聯來方便你的SELECT查詢功能
- 如何做多表關聯查詢
- MyBatisPlus怎麼多表關聯查詢?MyBatis
- mysql多表查詢如何實現MySql
- onethinkphp 如何做多表關聯查詢PHP
- thinkPHP多表聯合查詢PHP
- 使用mybatis example 和 java 8的特性來實現多表關聯且帶有查詢條件的查詢MyBatisJava
- Mybatis 多表關聯查詢(1) one-to-one關係MyBatis
- mybatis學習 - 多表查詢的實現MyBatis
- 複雜查詢—子查詢
- Laravel Query Builder 複雜查詢案例:子查詢實現分割槽查詢 partition byLaravelUI
- mysql資料庫多表查詢MySql資料庫
- 分散式資料庫下子查詢和 Join 等複雜 SQL 如何實現?分散式資料庫SQL
- MyBatis 多表聯合查詢,欄位重複的解決方法MyBatis
- MaxCompute複雜資料分佈的查詢優化實踐優化
- SQL優化之多表關聯查詢-案例一SQL優化
- SQL Server 多表聯合查詢取最新一條資料SQLServer
- JPA 之 多表聯合查詢
- Spring JPA聯表情況下的複雜查詢Spring
- jpa動態查詢與多表聯合查詢
- 多表關聯查詢中,關聯欄位都應該建立索引嗎?索引
- mybatis多表聯合查詢的寫法MyBatis
- SQL 複雜查詢SQL
- SQL複雜查詢SQL
- Mybatis【15】-- Mybatis一對一多表關聯查詢MyBatis
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- 使用 Redis 解決“樹”形資料的複雜查詢Redis
- WPF多表關聯資料繫結