我正在做一项学校作业,这件事已经困扰了我好几天了。任务是使用 View (VAvailableGolfers) 将与从组合框中选择的给定赛事/年份无关的高尔夫球手填充到列表框。以下是表中的数据:
表单上的预期输出将是:
- 2015 年 Goldstein 可用
- 2016 年没有空缺
- 2017 年 Goldstein 和 Everett 均可用
因此,换句话说,TGolferEventYears 中没有特定年份的高尔夫球手的记录
我尝试过左连接、全外连接、存在、不存在、不存在等,但我似乎无法确定 SQL 来实现它。
这是 VB 表单和支持它的 SQL。我不知道要在 View 中编码什么:
“从 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/