【问题标题】:MS SQL Query to find Name by joining over several tablesMS SQL Query 通过连接多个表来查找名称
【发布时间】:2017-01-23 06:04:45
【问题描述】:

项目表

Project
ShortDescription
Description
DB_ID
ProjektKMPoolStartDatum
ProjektKMPoolEndeDatum

项目经理

    DB_ID
ProjektID
KontaktID

联系方式

Benutzeraccount
EMail

想象以下场景: 在 ProjectManager 中列出了项目的所有者(KontaktID 是指联系人,ProjektID 是指项目)

我需要查询来查找 KontaktID=somevalue 的所有 Project.Project(所以真实名称不是 ID)

对于你们中的一些人来说,这可能很容易,但我在 SQL 方面真的很糟糕,所以任何帮助都会很棒:)

样本数据:

项目经理

DB_ID   ProjektID   KontaktID
43         14          25

项目

Project    ShortDescription               Description                       DB_ID   ProjektKMPoolStartDatum ProjektKMPoolEndeDatum
ABC-Test   Fantasie-Projekt !!! Diese Projekt enhält nur Fantasie-Namen !!!   14         2015-02-27 07:34:42.000         NULL

联系方式

DB_ID   Name    EMail
37     Ram Bo    xxx

【问题讨论】:

  • 添加一些示例表数据,以及预期的结果。 (格式化文本。)
  • 为什么是mysql标签?
  • 问题是表是如何相互连接的。 [Project Table][ProjectManager] 在每个表的DB_ID 上连接还是在[ProjectManager].ProjektID = [Project Table].DB_ID[ProjectManager].ProjektID = [Project Table].ProjektID 上连接。那么你的主键和外键是什么?

标签: sql sql-server-2008 join


【解决方案1】:

SQL 101

select p.Project, c.Name as ContactName
from Contact c
inner join ProjectManager m  on (c.DB_ID = m.KontaktID)
inner join Project p on (m.ProjektID = p.DB_ID)
where c.DB_ID = @KontaktID;

您可以将@KontaktID 替换为硬编码值,或者在运行sql 之前声明并设置变量。

如果您只需要 KontaktID 的项目列表,那么联系人表甚至不需要在 SQL 中

select p.Project
from ProjectManager m
inner join Project p on (m.ProjektID = p.DB_ID)
where m.KontaktID = @KontaktID;

【讨论】:

    【解决方案2】:
    SELECT Description FROM Project INNER JOIN DB_ID on Project.DB_ID = DB_ID.ProjektID  WHERE KontaktID=@KontaktID
    

    假设你有一个变量@KontaktID 或者只是在那里填写 id (我根据您的示例数据调整了联接)

    【讨论】:

      【解决方案3】:
      SELECT pr.Project 
      FROM Project pr
      JOIN ProjectManager pm on pr.DB_ID=pm.DB_ID
      JOIN Contact c on pr.DB_ID=c.DB_ID
      WHERE pm.KontaktID ='somevalue' --mention the filter condition
      

      【讨论】:

        猜你喜欢
        • 2011-07-27
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多