【问题标题】:SQL - How to write a query to retrieve names based on IDs where names and IDs are stored in different tableSQL - 如何编写查询以根据 ID 检索名称,其中名称和 ID 存储在不同的表中
【发布时间】:2015-09-20 06:49:38
【问题描述】:

我正在使用 asp.net 开发一个 Web 应用程序

我有三个包含以下字段的表:

  1. 用户详情:


    用户ID(pk) |名字 |姓氏

  2. 项目:


    项目ID |项目名称 |创建者ID |预算所有者 ID | SpoID |上一个用户 ID |状态ID

    注意:所有 ID 均指上表和下表中的 userID 和 statusID。

3.状态:


状态ID |状态描述

  1. 资源分配(更新):


    分配ID |项目ID | UserID(项目映射到的人)。

我需要以这种方式在gridview中显示项目的详细信息:

项目ID |项目名称 | CreatedByName |预算所有者名称 | SpocName LastUserName |状态描述

我想在 gridview 中显示他们的 ID 对应的名称(FirstName+LastName)。

如何使用 SQL 或 linq 来编写实体?请帮忙。

更新:第二个查询: 我想根据他分配到的项目显示所选资源的相同详细信息。

【问题讨论】:

    标签: c# mysql asp.net sql-server linq-to-entities


    【解决方案1】:

    您需要为每个需要为其命名或描述的列使用JOIN

    SELECT 
        proj.ProjectID, 
        proj.ProjectName, 
        created.FirstName + ' ' + created.LastName as CreatedByName, 
        budget.FirstName + ' ' + budget.LastName as BudgetOwnerName, 
        spoc.FirstName + ' ' + spoc.LastName as SpocName, 
        lastUsr.FirstName + ' ' + lastUsr.LastName as LastUserName, 
        status.StatusDescription
    FROM projects proj
        INNER JOIN UserDetails created ON proj.CreatedByID = created.UserID
        INNER JOIN UserDetails budget ON proj.BudgetOwnerID = budget.UserID
        INNER JOIN UserDetails spoc ON proj.SpocID = spoc.UserID
        INNER JOIN UserDetails lastUsrON proj.LastUserID = lastUsr.UserID
        INNER JOIN Statuses status ON  proj.StatusID = status.StatusID
    

    以上查询假定您的所有ID 字段将始终填充数据。如果其中任何一个可以是NULL,则应将INNER JOIN 更改为LEFT JOIN

    【讨论】:

    • 我尝试了这个查询,但它在budgetownername 和where 子句(下)显示蓝色标记“它包含对对象的未解析引用”。这是查询: CREATE PROCEDURE [dbo].GetNamesByID @UserID int AS SELECT proj.ProjectID, proj.ProjectTitle, proj.ProjectType, created.FirstName + ' ' + created.LastName as CreatedByName, bugdet.FirstName + ' ' + bugdet .LastName 作为 BudgetOwnerName,spoc.FirstName + ' ' + spoc.LastName 作为 SpocName,
    • lastUsr.FirstName + ' ' + lastUsr.LastName 作为 LastUserName,ODCManID.FirstName + ' ' + ODCManID.LastName 作为 ODCManName,stat.StatusDescriptionFROM PROJECT proj INNER JOIN USER_DETAILS created ON proj.CreatedByID = created。用户 ID 左加入 USER_DETAILS 预算 proj.BudgetOwnerID = 预算JOIN MST_STATUS stat ON proj.StatusID = stat.StatusID WHERE USER_DETAILS.UserID = @UserID RETURN 0
    • 对不起,这是我的错字。在SELECT 子句中它是bugdet,当它应该是budget - 字母d 和g 交换位置。我更新了答案,它现在应该可以工作了
    • 是的thankyou..还有一个小说明..我在最后添加了一个where子句“WHERE USER_DETAILS.UserID = @UserID”。它显示相同的消息。我能做些什么呢?
    • @tennisno1 您在查询中多次使用USER_DETAILS,因此您需要更具体,例如使用 created.UserID = @UserIDbudget.UserID = @UserID 或任何其他联合别名
    猜你喜欢
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    相关资源
    最近更新 更多