【问题标题】:SQL statement WHERE clause condition with multiple values具有多个值的 SQL 语句 WHERE 子句条件
【发布时间】:2015-01-21 07:32:58
【问题描述】:

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

于是我创建了这条 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。那么在这种情况下我应该如何格式化呢?

提前致谢。

【问题讨论】:

  • 您似乎没有对此进行任何研究,只是作为说明,使用您的问题标题进行简单的谷歌搜索将为您返回正确答案

标签: mysql sql select where


【解决方案1】:

使用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

【讨论】:

    【解决方案2】:

    您需要使用动态 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);
    

    【讨论】:

    • 这是一个糟糕的动态查询用例,这里不需要。
    • 我只是用它作为一个例子来说明如何使用动态 SQL 来解决这些问题。我很欣赏这是矫枉过正
    最近更新 更多