【问题标题】:Multiple INNER JOIN in sqldatasource for displaying in a gridviewsqldatasource中的多个INNER JOIN用于在gridview中显示
【发布时间】:2015-02-06 07:46:37
【问题描述】:

几乎所有内容都在标题中,我正在尝试创建一个 SQL 数据源,用于在 gridview 中显示多个表中的数据。

我在模型中有三个表:

table lot_poudre with Id(主键)、reference、date_fabrication、ref_fab、masse_reelle、projet_Id(表 projet 的 Id 的外键)

table lot_element with Id(主键)、masse、lot_poudre_Id(lot_poudre 表的 Id 的外键)

带有 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>

问题是当我尝试显示第三个表中的数据时(使用 table 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 个表的值!!

谢谢

博德'

【问题讨论】:

    标签: asp.net entity-framework gridview inner-join sqldatasource


    【解决方案1】:

    感谢您的回答,

    我终于找到了问题所在。在实体框架中,有时您必须在某些实体上加上“s”。在这种情况下,它起作用了(“s”添加到“project”)。

    在第一个 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"
    

    谢谢大家

    【讨论】:

      【解决方案2】:

      您的内部连接不正确。试试这个 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
      

      【讨论】:

        【解决方案3】:

        在您拥有第一个 ON 条件之前,您有两个 INNER JOIN。在下一个 INNER JOIN 语句之前,每个连接实例都需要跟随该连接的 ON 条件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-09
          • 1970-01-01
          • 1970-01-01
          • 2011-05-29
          • 2011-10-30
          • 1970-01-01
          相关资源
          最近更新 更多