[英]Multiple INNER JOIN in sqldatasource for displaying in a gridview
標題中幾乎所有內容都在其中,我試圖在其中創建一個SQLdatasource來顯示gridview中多個表中的數據。
我在模型中有三個表:
具有ID(主鍵),引用,date_fabrication,ref_fab,masse_reelle,projet_Id的表lot_poudre(表projet的ID的外鍵)
具有ID(主鍵),mass,lot_poudre_Id(lot_poudre表的ID的外鍵)的表lot_element
帶有ID,標稱值的表項目
這是我嘗試過的用於顯示兩個表(lot_poudre和lot_element)中數據的方法:
<asp:SqlDataSource
ID="SqlDataSourcelotspoudre"
runat="server"
ConnectionString="Data Source=GRE032477\SQLEXPRESS;Initial Catalog=db_pour_test;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework"
ProviderName="System.Data.SqlClient"
SelectCommand=
"SELECT lot_poudre.Id, lot_poudre.reference, lot_poudre.date_fabrication, lot_poudre.ref_fab, lot_poudre.masse_reelle/Sum(lot_element.masse)*100 AS rendement, lot_poudre.masse_reelle AS masse_initiale
FROM
lot_poudre INNER JOIN lot_element
ON lot_poudre.Id = lot_element.lot_poudre_Id
GROUP BY lot_poudre.Id,lot_poudre.reference, lot_poudre.date_fabrication, lot_poudre.ref_fab,lot_poudre.masse_reelle;"></asp:SqlDataSource>
問題是當我嘗試顯示來自第三張表的數據時(使用表projet):
<asp:SqlDataSource
ID="SqlDataSourcelotspoudre"
runat="server"
ConnectionString="Data Source=GRE032477\SQLEXPRESS;Initial Catalog=db_pour_test;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework"
ProviderName="System.Data.SqlClient"
SelectCommand=
"SELECT lot_poudre.Id, lot_poudre.reference, lot_poudre.date_fabrication, lot_poudre.ref_fab, projet.nom, lot_poudre.masse_reelle/Sum(lot_element.masse)*100 AS rendement, lot_poudre.masse_reelle AS masse_initiale
FROM projet
INNER JOIN
lot_poudre INNER JOIN lot_element
ON lot_poudre.Id = lot_element.lot_poudre_Id
ON projet.Id = lot_poudre.projet_Id
GROUP BY lot_poudre.Id,lot_poudre.reference, lot_poudre.date_fabrication, lot_poudre.ref_fab,lot_poudre.masse_reelle, projet.nom;"></asp:SqlDataSource>
我得到的錯誤表明對象“ projet”的名稱無效。
我嘗試了一切並需要一些幫助,最終的gridview我正在嘗試從5個表構建顯示值!
謝謝
京東方投資”
您的內部聯接不正確。 試試這個sql:
SELECT lot_poudre.Id,
lot_poudre.reference,
lot_poudre.date_fabrication,
lot_poudre.ref_fab, projet.nom,
lot_poudre.masse_reelle/Sum(lot_element.masse)*100 AS rendement,
lot_poudre.masse_reelle AS masse_initiale
FROM projet
INNER JOIN lot_poudre ON projet.Id = lot_pourde.Id
INNER JOIN lot_element ON lot_poudre.Id = lot_element.lot_poudre_Id
GROUP BY lot_poudre.Id,lot_poudre.reference, lot_poudre.date_fabrication, lot_poudre.ref_fab,lot_poudre.masse_reelle, projet.nom
在具有第一個ON條件之前,您有兩個INNER JOIN。 在下一個INNER JOIN語句之前,每個連接實例都必須在該連接的ON條件之后。
感謝您的回答,
我終於找到了問題所在。 在entityframework中,有時必須在某些實體上加上“ s”。 在這種情況下,它可以正常工作(將“ s”添加到“項目”中)。
在第一個ON之前有兩個INNER JOIN,因為我要聯接三個表。 在Microsoft Access中,“內部” INNER JOIN有一個括號,這使我更清楚。
"SELECT lot_poudre.Id, lot_poudre.reference, lot_poudre.date_fabrication, lot_poudre.ref_fab, projets.nom, lot_poudre.masse_reelle/Sum(lot_element.masse)*100 AS rendement, lot_poudre.masse_reelle AS masse_initiale
FROM lot_element
INNER JOIN
lot_poudre INNER JOIN projets
ON lot_poudre.projet_Id = projets.Id
ON lot_element.lot_poudre_Id = lot_poudre.Id
GROUP BY lot_poudre.Id,lot_poudre.reference, lot_poudre.date_fabrication, lot_poudre.ref_fab,lot_poudre.masse_reelle, projets.nom"
這也很好(RickJames回答中添加了“ s”)。
SELECT lot_poudre.Id,
lot_poudre.reference,
lot_poudre.date_fabrication,
lot_poudre.ref_fab,
projets.nom,
lot_poudre.masse_reelle/Sum(lot_element.masse)*100 AS rendement,
lot_poudre.masse_reelle AS masse_initiale
FROM projets
INNER JOIN lot_poudre ON projets.Id = lot_poudre.projet_Id
INNER JOIN lot_element ON lot_poudre.Id = lot_element.lot_poudre_Id
GROUP BY lot_poudre.Id,lot_poudre.reference, lot_poudre.date_fabrication, lot_poudre.ref_fab,lot_poudre.masse_reelle, projets.nom"
感謝大家
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.