SQL 查询显示高尔夫球手何时未参加某个赛事/年份

标签 sql vb.net

我正在做一项学校作业,这件事已经困扰了我好几天了。任务是使用 View (VAvailableGolfers) 将与从组合框中选择的给定赛事/年份无关的高尔夫球手填充到列表框。以下是表中的数据:

SQL Data

表单上的预期输出将是:

  • 2015 年 Goldstein 可用
  • 2016 年没有空缺
  • 2017 年 Goldstein 和 Everett 均可用

因此,换句话说,TGolferEventYears 中没有特定年份的高尔夫球手的记录

我尝试过左连接、全外连接、存在、不存在、不存在等,但我似乎无法确定 SQL 来实现它。

这是 VB 表单和支持它的 SQL。我不知道要在 View 中编码什么:

VB Form

“从 vAvailableGolfers 中选择 intGolferID、strLastName,其中 intEventYearID = "& cboEvents.SelectedValue.ToString

这是 View ,我知道它没有给出正确的输出:

select tg.intGolferID, strLastName, intEventYearID
from TGolferEventYears TGEY, TGolfers TG
Where tgey.intGolferID = tg.intGolferID 
and intEventYearID not IN
         (select intEventYearID
         from TEventYears
         where intEventYearID not in
               (select intEventYearID
               from TGolferEventYears))

感谢任何帮助

最佳答案

我通常通过使用交叉连接来生成所有可能的组合,然后使用左连接/where来过滤此类问题找出已经存在的:

select g.intGolferID, g.strLastName, ey.intEventYearID
from TEventYears ey cross join
     TGolfers g left join
     TGolferEventYears gey
     on gey.intGolferID = g.intGolferID and
        gey.intEventYearID = ey.intEventYearID
where gey.intGolferID is null;

关于SQL 查询显示高尔夫球手何时未参加某个赛事/年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58888415/

相关文章:

.net - 在多线程期间检索 Windows 窗体属性

mysql - 使用别名优化 Select 子查询

sql - MSSQL - 将一个字段拆分为 3 个字段

mysql - 使用 sql 将一些列值放入新列中

.net - WPF 中 Calendar 和 Datepicker 控件之间的区别?

c# - Asp.net 中的异步 Web 服务

c# - VB param ( , ) 中的奇怪参数转换为 C#

java - 使用 JDBCTemplate 的单个查询中的多个数据源

mysql - SQL case 语句 - 根据另外 2 个表从第三个表中选择值

c# - 您如何阅读存档的事件日志文件?