SQL Server简单查询自己加入表

时间:2014-11-10 18:13:43

标签: sql-server

我有一张表GAMES,其中包含过去玩游戏的数据。此查询的目的是查找在同一日期播放的所有游戏并打印日期,播放的两个团队和结果。表格设置如下:

游戏

Home   | Visitors|Date      |Result
-------------------------------------
Bengals| Browns  | 1/1/2012 | Tie
Browns | Bengals | 1/1/2012 | Loss
Giants | Jets    | 4/2/2013 | Win
Giants | Cowboys | 4/2/2013 | Loss
Bears  | Ravens  | 5/3/2012 | Tie
Bills  | Dolphins| 10/11/2014| Win
...

我认为解决方案是在类似于

的查询中加入表
select 
    A.Date, A.Home, A.Visitors, A.Result
from 
    GAMES as A, GAMES as B
where 
    A.Date = B.Date 
    and A.Home = B.Visitors;

但是在这个特定的查询中,它首先只返回一个游戏,总共有6个游戏应该显示,并且只返回表A中的值。有没有办法可以编写查询它一次找到所有游戏,而不是定制一个特定的查询来找到每个游戏?感谢。

期望的结果将是:

1 2012-1-1 Bengals Browns Tie
2 2012-1-1 Browns Bengals Loss
3 2013-4-2 Giants Jets Win
4 2013-4-2 Giants Cowboys Loss
etc. 

2 个答案:

答案 0 :(得分:0)

好的,听起来像你正在尝试做的就是找到发生多个游戏的日期。在那种情况下

SELECT a.Date, count(*) as CountOfDate
FROM GAMES a
GROUP BY a.Date
HAVING count(*) > 1

答案 1 :(得分:0)

这样的事情怎么样?

SELECT
    A.Date, A.Home, A.Visitors, A.Result
FROM 
    GAMES as A
WHERE EXISTS (SELECT * 
              FROM GAMES as B 
              WHERE A.DATE = B.DATE 
                AND (A.Home <> B.Home 
                OR   A.Visitors <> B.Visitors))
ORDER by A.Date ASC