15

我需要通过以下方式执行选择查询:

select * from my_table where id NOT IN (comma_delimited_string);

实现这一目标的正确方法是什么?

考虑到我可以控制发送字符串的客户端代码这一事实,是否有更好的方法?(字符串将包含大约 30 个 id,所以我试图避免发送 30 个参数,每个 id 一个)。

谢谢你们

4

1 回答 1

35

您可以使用 MySQLFIND_IN_SET功能:

SELECT *
FROM my_table
WHERE FIND_IN_SET(id, comma_delimited_string) = 0

附录:请注意,上面的查询不可优化,因此如果您在idMySQL 上有索引,则不会使用它。您必须决定使用的相对简单性FIND_IN_SET是否值得潜在的性能影响(我说潜在是因为我不知道是否id已编入索引,或者您的表是否足够大以至于值得关注)。

于 2013-06-07T18:12:17.930 回答