我需要以以下方式执行选择查询:
select * from my_table where id NOT IN (comma_delimited_string);
实现该目标的正确方法是什么?
考虑到我可以控制发送字符串的客户端代码,有没有更好的方法?(该字符串将包含大约30个id,因此我试图避免发送30个参数,每个id一个)。
谢谢你们
您可以使用MySQL FIND_IN_SET
函数:
SELECT *
FROM my_table
WHERE FIND_IN_SET(id, comma_delimited_string) = 0
附录 :请注意,上面的查询 无法 优化,因此,如果您在id
MySQL
上有索引,则不会使用它。您必须决定使用相对简单FIND_IN_SET
是否值得潜在的性能损失(我之所以说潜在的原因是因为我不知道是否对id
索引进行了索引或者您的表是否足够大,这值得关注)。
问题内容: 我有以下表格: 过滤器 使用者 我想运行以下选择 我想收到 但是我什么也没收到。 问题在于该字段是文本,因此“ in select”返回的内容类似于“ 1、2、3”(带有分号),因此 in 找不到任何值。 是否可以进行强制转换或将字符串更改为数组的选项? 问题答案: 最好规范化您的架构,不要以逗号分隔列表的形式存储关系,而是为此创建一个联结表,以维护用户和过滤器之间的 m:m 多对多关
问题内容: 我的一个表中有一列,其中存储多个用逗号分隔的ID。有没有一种方法可以在查询的“ IN”子句中使用此列的值。 column()的值类似于 我需要用作 我对Crozin的回答感到满意,但我愿意接受建议,观点和选择。 随时分享您的观点。 问题答案: 以@Jeremy Smith的FIND_IN_SET()示例为基础,您可以使用联接来完成此操作,因此不必运行子查询。 这是众所周知的非常表现
问题内容: 如果用户定义的变量是一串用逗号分隔的数字,例如,是否可以在函数中使用它? 具体来说: 不选择t等于c等于1或2或4的行。 问题答案: 您不能直接使用变量来执行此操作。根据您现在拥有的内容,服务器正在尝试执行…显然,这不是您想要的,因为您要检查c是否包含给定的单个字符串。 您必须根据列表生成动态SQL,以使其正常工作。
问题内容: 我想在MySQL中将选定的值转换为逗号分隔的字符串。我的初始代码如下: 哪个产生了: 我想要的输出看起来像这样: 问题答案: 检查一下
问题内容: 我有以下字符串: 我怎么只能选择?第三个逗号之前的字符串长度可能会有所不同,并且内可能会有逗号。 我想要尽可能简洁的代码,即最好是1行代码,没有循环。但是,请随时发布您想到的任何解决方案。 问题答案: 我只是想出了一些可行的方法:
问题内容: 您可以使用RegEx将逗号分隔的字符串解析为MySQL中的临时表吗? 问题答案: 这个问题与Mysql可以拆分列差不多吗? MySQL没有拆分字符串函数,因此您必须解决。使用上面答案页中列出的方法之一分割数据后,您就可以对数据进行任何处理。 您可以遍历该自定义函数,并在返回空值时中断它,您必须播放并学习一些语法(或者至少是我愿意),但是mysql中FOR循环的语法是: http://w