大家好我的SQL查询有问题,我找不到解决方案。
在我的数据库中,我有两个表,Mytable1和Mytable2。 Mytable1包含列idCalendar,idPlayer,datePlaying和Mytable2包含列idPlayer和namePlayer。
我想在Mytable1中提取没有参加比赛的球员的名字。
例如 Mytable1(包含播放器和播放日期):
idCalendar|idPlayer|datePlaying
1 | 1 | 05/01/2012
2 | 2 | 06/01/2012
3 | 3 | 08/01/2012
4 | 2 | 05/01/2012
1 | 1 | 05/01/2012
2 | 2 | 06/01/2012
3 | 3 | 08/01/2012
4 | 2 | 05/01/2012
Mytable2(包含所有玩家名称):
idPlayer|namePlayer
1 | P1
2 | P2
3 | P3
4 | P4
我想创建一个显示以下结果的视图:
ViewResult(没有按日期比赛的球员):
1 | P1
2 | P2
3 | P3
4 | P4
datePlaying | playerName
正如您所看到的,我需要获得此信息的结果: - 在05/01/2012 P2和P3没有参加比赛。 - 在06/01/2012 P1和P3没有参加比赛。 - 在08/01/2012 P1和P2没有参加比赛。
我希望我已经足够清楚了。提前谢谢。
答案 0 :(得分:3)
可能这么简单的事情会起作用。
select
d.datePlaying, p.namePlayer
from
table2 p
cross join
(select distinct datePlaying from table1) d
left join
table1 t on t.idPlayer = p.idPlayer and t.datePlaying = d.datePlaying
where
t.idPlayer is null
作为旁注,如果你有一个非玩家参与的日期会发生什么?你不会在table2中有一个条目。你关心还是应该有第3个表来表示任何球员应该参加的日期。这个日期表将用于替换我的别名' d'交联表。
答案 1 :(得分:0)
我在这台电脑上没有手持数据包,所以我暂时无法测试 - 我会继续研究它。
SELECT DISTINCT a.datePlaying, b.playerName
FROM Mytable1 a
INNER JOIN Mytable2 b
ON a.idPlayer = b.idPlayer
WHERE NOT EXISTS (
SELECT idPlayer
FROM Mytable1 a2
WHERE a.datePlaying = a2.datePlaying)
ORDER BY a.datePlaying