2015-01-21 201 views
1

我在尝试使用WHERE子句条件的多个值编写SQL语句时遇到了一些问题。所以基本上我会在地图上绘制一个缓冲区,它会返回一个eventID列表。SQL语句有多个值的WHERE子句条件

所以我创造了这个SQL语句,并测试了它:

SELECT count(*) AS totalRaces, a.races FROM bookedevent be INNER JOIN 
account a 
ON be.bookedEventBY = a.accountName 
WHERE be.eventID = 70 OR be.eventID = 69 OR be.eventID = 55 
GROUP BY a.races 

它的工作原理。但是,这个SQL语句只能用于3个eventID。对于某些缓冲区,它可能会返回我最多10个eventID。那么在这种情况下我应该如何格式化?

在此先感谢。

+1

看起来并不像你这样在这一个任何研究,只是作为一个音符,一个简单的谷歌搜索与你的问题将返回称号正确的答案 – 2015-01-21 07:35:48

回答

5

使用IN条款

SELECT count(*) AS totalRaces, a.races FROM bookedevent be INNER JOIN 
account a 
ON be.bookedEventBY = a.accountName 
WHERE be.eventID in(70,69,55) 
GROUP BY a.races 
0

你需要使用动态SQL。

然后,您可以将您的eventID列表作为逗号分隔列表传递。然后,您可以动态地改变在IN cluse项目数

declare @Events as varchar(1000) 
    declare @SQL as varchar(1000) 

    Select @Events = '55, 60, 70' 

    select @SQL = 'SELECT count(*) AS totalRaces, a.races 
    FROM bookedevent be 
    INNER JOIN account a ON be.bookedEventBY = a.accountName 
    WHERE be.eventID in (' + @Events + ') 
    GROUP BY a.races' 

    Exec (@SQL); 
+0

这是一个动态查询的糟糕用例,在这里不需要。 – 2015-01-21 08:32:28

+0

我刚刚用它作为你如何使用动态SQL来解决这些问题的例子。我明白这是过度的 – Ewan 2015-01-21 08:37:34