三个表的 SQL 查询问题

发布于 2024-10-05 22:25:52 字数 210 浏览 6 评论 0原文

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

所以我有一个表 Sprint、Task 和 Blocked。

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

谁能帮我解决这个问题,我将不胜感激。

谢谢

I've got three tables, I want to select two columns from the first table and one from the last table to be displayed in a gridview for asp.net

So I have a table Sprint, Task and Blocked.

I want to display CurrentStatus from blocked table and to do this I need to use the Task table to join them together. I've attempted the query below but it doesn't work.

Can anyone help me on this please, it would be appreciated.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

贩梦商人 2024-10-12 22:25:52

您现在执行此操作的方式是,

  • 首先在任务上执行 LEFT JOIN(这会保留没有任务的 Sprint 条目),然后
  • 在 Blocked 上执行 INNER JOIN (这将删除没有 Blocked 条目的 Sprint 条目) 。

基本上,您需要先 INNER JOIN Task 和 Blocked,然后 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

或者,如果这对您来说更容易理解,您可以这样写: You LEFT将 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 

The way that you are doing it now, you are doing

  • first a LEFT JOIN on Task (which keeps the Sprint entries without a Task) and
  • then an INNER JOIN on Blocked (which removes the Sprint entries which don't have a Blocked entry).

Basically, you need to INNER JOIN Task and Blocked first, then RIGHT JOIN to Sprint (which gets all Sprints):

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

Alternatively, if that's easier to understand for you, you can write it like this: You LEFT JOIN Sprint to the already combined Task-Blocked data.

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 
旧话新听 2024-10-12 22:25:52

那么 RPM 是正确的。我刚刚测试了它,你需要两个 LEFT JOIN 。

Well RPM is right. I just tested it, and you need two LEFT JOINs.

骄兵必败 2024-10-12 22:25:52

我想我只是展示 RPM1984 和 Jordan 在这里所说的话,我认为他们是正确的:

试试这个:

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

I think I'm just showing what RPM1984 and Jordan are saying here and I think they're correct:

Try this:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文