0

大家好,我有一个 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

Mytable2(包含所有玩家姓名):

idPlayer|namePlayer

1  | P1
2  | P2
3  | P3
4  | P4

我想创建一个显示以下结果的视图:

ViewResult(按日期没有玩过的玩家):

datePlaying | playerName

05/01/2012  | P2
05/01/2012  | P3
06/01/2012  | P1
06/01/2012  | P3
08/01/2012  | P1
08/01/2012  | P2

如您所见,我需要此信息的结果:- 2012 年 5 月 1 日 P2 和 P3 尚未播放。- 2012 年 6 月 1 日 P1 和 P3 尚未播放。- 2012 年 8 月 1 日 P1 和 P2 尚未播放。

我希望我已经足够清楚了。先感谢您。

4

2 回答 2

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 中有条目。您是否关心或是否应该有第三张桌子来代表任何玩家应该玩的日期。此日期表将用于替换我的别名“d”交叉连接表。

于 2012-05-26T20:10:05.187 回答
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
于 2012-05-26T17:38:45.643 回答