在语句的WHERE部分中使用OR过滤SQL结果的最佳实践

然而,我一直在使用mySQL,但这是我第一次不得不执行如下的查询。它的工作原理,但我想知道是否有更好的方式来写它。

SELECT * FROM foo WHERE bar = 10058 or bar = 90234  or bar = 98211 or bar 4002 or bar = 90023

使用这种方法可以获得的行数是否有限制?我犯了一个错误?有没有更好的办法?

在这个特殊情况下,FYI将永远是独一无二的

0
额外 编辑
意见: 1

4 答案

你想要一个 IN 子句

SELECT * FROM foo WHERE bar in (10058,90234,98211,4002,90023)

无论如何,在你的数据库引擎的内部,它会在运行时将它扩展为一个OR'ed堆栈;即像

WHERE bar = 10058 or bar = 90234  or bar = 98211 or bar 4002 or bar = 90023
0
额外

你想使用 IN

SELECT *
FROM `foo`
WHERE `bar` IN (10048, 90234, 98211, 4002, 90023)
0
额外

使用 IN ,如下所示:

SELECT * FROM foo WHERE bar IN (10058,90234,98211,4002,90023)
0
额外

你可以将WHERE子句压缩到:

SELECT * FROM foo WHERE bar in (10058,90234,98211,4002,90023)
0
额外