我有一个样本数据库,其中包含了从1月1日到1月7日所有NBA球员的统计数据。我有一个查询设置,可以查看当球员正在比赛或不使用比赛时球队所有球员的比赛时间日期或日期不在。例如,这是查询球员Courtney Lee的时间:
select player, date, tm, Minutes
from nba.player_stats
where tm='BOS' and
date in (select date
from nba.player_stats
where player = 'Courtney Lee');
返回: 这个问题是,5号,Courtney Lee被交易到了MEM。然后他在7日参加了tm MEM,所以它在7日返回了BOS的数据。但是,我不希望它这样做,因为他不再使用tm BOS。
理想情况下,我不想包含声明where tm='BOS'
。我想在'Courtney Lee'中说球员,并且只返回他在比赛日期间效力的球队统计数据。
这是我计划同时为来自不同团队的几名玩家运行的查询。就像现在一样,我必须逐个玩家,一队一队,并在交易发生时手动过滤日期。
答案 0 :(得分:1)
我不确定(会喜欢用一些小数据来测试),但我认为你可以简单地在桌子之间做一个“自我加入”。
类似的东西:
select t2.*
from nba.player_stats t1
inner join nba.player_stats t2 on
t1.date = t2.date and t1.tm = t2.tm
where t1.player = 'Courtney Lee'
这是一个小小的猜测工作,但....基本上它从player_stats中选择你的玩家是Courtney Lee,然后它在日期和团队中再次加入player_stats,这似乎是你在子查询中所追求的在你的哪个地方?