【问题标题】:ASP.net Gridview SQL Query with multiple Tables (SQL ISSUE not ASP)具有多个表的 ASP.net Gridview SQL 查询(SQL ISSUE 不是 ASP)
【发布时间】:2025-11-27 12:45:02
【问题描述】:

SO is Awesome 学到了很多东西!

但是我在这件事上找不到任何帮助,不知道哪个天才会先回答:D

好的,我有一个像往常一样显示表格结果的网格视图

但是,此表是其中存储大量来自其他表的 ID 号而不是项目名称的表之一。即

(tbluser) (tblreg) (tblact) (tblsite) (tblsite) Fname----sname----regionaccess----accountaccess----basedloc----currentsite----active 测试------测试----------1-----1-------------1 ----------1---------真实

所以这些数字是我也可以参考的其他表格中的 ID 号,但是对于任何阅读它的人来说,这在 gridview 显示上毫无意义。

所以我需要一个 Sql Select 语句,它将(或我认为是正确的词)连接到适当的表并获取每个 ID 号的名称,以便 Gridview 看起来像

Fname----sname----regionaccess----accountaccess----basedloc----currentsite----active test-----test---------Admin ---------AccessAll--------T'Ton--------T'Ton-- -----是的

有人可以帮忙吗?

编辑: 这是(半)工作的 SQL,必须更改为内部连接,因为 VS 不接受它,

SELECT Users.[First Name]、Users.Surname、Users.Login、Regions.RegionName、[Profile Options].ProfileDesc、Sites.Sitename AS OwningSite、Sites.Sitename AS SiteSetting FROM (Sites INNER JOIN (Regions INNER JOIN Users ON Regions.RegionID = Users.[Region Access]) ON (Sites.SiteID = Users.owningsite) AND (Regions.RegionID = Sites.owningregionid) AND (Sites.SiteID = Users。 Currentsitesetting)) INNER JOIN [Profile Options] ON Users.[Account Access] = [Profile Options].ProfileID

问题是它从其他表中收集名称很好,但不会显示用户表中的所有记录,只显示具有相同 ID 的记录,从这些表中获取名称

【问题讨论】:

  • 抱歉表格格式没有保留,前两个字段来自 tbluser,四个 ID 号来自其他 4 个表格。
  • 如何从数据库中获取数据——SqlDataSource? SqlCommand?发布相关代码,以便您获得所需的帮助。
  • 通过访问选择命令,但这真的会改变 SQL 吗?当然,如何调用 SQL 不会影响语句本身。

标签: asp.net sql


【解决方案1】:

我认为你只需要按照你所说的那样在你的 selectcommand 中加入表格。这对我有用:

SELECT DISTINCT
    tbluser.Fname as Firstname,
    tbluser.sname as Username (? or something)
    tblreg.? as ?
    <tablename>.<columnname> as <some custom name>
    ...
    (only select the things you want to display in the grid ofc.)

FROM tableWithIds
    LEFT JOIN tbluser
        ON tableWithIds.userid = tbluser.userid
    LEFT JOIN tblreg
        ON tableWithIds.someid = tblreg.someid
    LEFT JOIN <someothertable>
        ON tableWithIds.someid = someothertable.otherid
    ...
    (join all the tables by id)

left join 确保即使 remoteid 不存在,您也会从 tablewithids 中获得所有结果。如果您只想要远程 ID(例如用户 ID)存在的结果,请将所需表的 LEFT JOIN 更改为 INNER JOIN。 SELECT DISTINCT 确保您不会从所有连接中获得任何重复值。如果您只想区分几列(例如,因为用户可以拥有多个站点),请使用:select distinct username, lastname, ... from (select (the rest) from table)

这是你要找的吗?

【讨论】: