2014-09-05 90 views
0

嘿,我试图找出那些在co72010讲座中同时开始的事件。我不知道如何去做这件事,我必须做一个INNER JOINGROUP BY在其中一个字段中查找具有相同值的SQL记录

events 

id   modle kind  dow tod duration  room 
co12004.L01 co12004 L Wednesday 11:00  1 cr.SMH 
co12004.L02 co12004 L Monday 17:00  1 cr.B13 
co12004.T01 co12004 T Monday 11:00  2 co.G78+G82 
co12004.T02 co12004 T Tuesday 15:00  2 co.B7 
co12004.T03 co12004 T Tuesday 13:00  2 co.G78+G82 
+0

我没有看到任何在任何领域有co72010的东西。在那里,这很容易。 – Siyual 2014-09-05 14:21:33

+0

哈哈它不是记录的整个列表...:P – Richard 2014-09-05 14:27:29

+0

在你的问题中陈述一个价值的观点是帮助其他人试图找到一种方法来帮助你。这些信息是无用的,除非你向社区展示正确的价值观,以便人们最好地理解你所说的话,以避免@Siyual这样的评论,他们实际上是正确的。 – 2014-09-05 14:36:26

回答

1

您可以使用Exists。也许是这样的:

Select E.* 
From Events E 
Where Exists 
(
    Select 1 
    From Events O 
    Where O.dow = E.dow 
    And  O.tod = E.tod 
    And  O.modle = 'co72010' 
) 

或者,你可以使用一个Join还有:

Select E.* 
From Events E 
Join Events O On O.Dow = E.Dow 
        And O.Tod = E.Tod 
Where O.Modle = 'co72010' 
+0

这似乎正在带回所有,但co7210的结果? – Richard 2014-09-05 14:47:44

+0

@Richard如果你还想'co7210'行,删除连接条件'And O.id <> E.id' – Bohemian 2014-09-05 15:02:22

+0

啊,不知道你是否想要co72010的结果。我更新了查询。 – Siyual 2014-09-05 15:02:36

1
Select E.* 
From event E 
Where Exists 
(
    Select 1 
    From event O 
    Where O.dow = E.dow 
    And  O.tod = E.tod 
    And  O.modle = 'co72010' 
) and E.modle != 'co72010' 

因此,它并没有表现出同样模块,只有那些在的那些同时co72010,但不是它本身?

0
SELECT a.id, a.modle, a.dow, a.tod, b.id, b.modle, b.dow, b.tod 
FROM event a JOIN event b on (a.dow=b.dow AND a.tod=b.tod) 
WHERE a.modle = 'co72010' AND b.modle != 'co72010' 
+1

欢迎来到StackOverflow,提供一个关于为什么这是正确的解决方案的上下文会有所帮助。 – jessehouwing 2016-01-01 18:47:59