三个表的SQL查询问题

时间:2010-12-02 22:22:10

标签: asp.net sql left-join

我有三个表,我想从第一个表中选择两个列,从最后一个表中选择一个在asp.net的gridview中显示

所以我有一张桌子Sprint,Task和Blocked。

我想从被阻止的表中显示CurrentStatus,为此我需要使用Task表将它们连接在一起。我尝试了下面的查询,但它不起作用。

任何人都可以帮助我,我们将不胜感激。

由于

3 个答案:

答案 0 :(得分:1)

你现在正在这样做,你正在做

  • 首先对任务进行LEFT JOIN(保持没有任务的Sprint条目)和
  • 然后阻止INNER JOIN(删除没有阻止条目的Sprint条目)。

基本上,你需要INNER JOIN任务并首先阻止,然后 RIGHT JOIN到Sprint(获得所有Sprint):

SELECT tblSprint.sprintID, tblSprint.projectID, tblBlocked.CurrentStatus 
FROM tblTask 
     INNER JOIN tblBlocked ON tblTask.taskID = tblBlocked.taskID
     RIGHT JOIN tblSprint ON tblTask.sprintID = tblSprint.sprintID

或者,如果您更容易理解,可以这样写:您将Sprint加入已合并的任务阻止数据。

SELECT tblSprint.sprintID, tblSprint.projectID, tblBlocked.CurrentStatus 
FROM tblSprint LEFT JOIN (tblTask INNER JOIN tblBlocked 
                          ON tblTask.taskID = tblBlocked.taskID)
     ON tblSprint.sprintID = tblTask.sprintID 

答案 1 :(得分:0)

RPM很好。我刚测试过,你需要两个LEFT JOIN s。

答案 2 :(得分:0)

我想我只是在展示RPM1984和乔丹在这里说的话,我认为它们是正确的:

试试这个:

SELECT tblSprint.sprintID, tblSprint.projectID, tblBlocked.CurrentStatus  
FROM tblSprint  
     LEFT JOIN tblTask ON tblSprint.sprintID = tblTask.sprintID  
     LEFT JOIN tblBlocked ON  tblBlocked.taskID = tblTask.taskID