怎样将数组作为sql中in的查询条件

啊,对,对……2 02 2 年我还在用这个……PostgreSQL真的很方便。
只需使用一个数组即可。
在我使用 PostgreSQL 的项目中,我使用 set my_array '{1 ,2 ,3 }' 来声明数组并使用 ANY。
简单的。
但是 MySQL 不行。
该功能在 8 .0 之前不可用。
稍后,2 02 2 年,MySQL 8 .0将流行,您可以使用JSON_TABLE或临时表。
JSON_TABLE感觉比较混乱,需要和JSON结合起来。
还有临时表可用于数据插入等。
我尝试插入三个值:1 、2 和3 ,然后 JOIN 它们。
SQL Server 相当于表变量或 STRING_SPLIT。
STRING_SPLIT,用逗号分隔,我觉得用SQL Server 2 01 6 +就可以了。
Oracle使用的是嵌套表类型,DECLARE变量,number_varray,感觉有点麻烦。
无论如何,各有各的难处。

还有动态SQL拼接,这也是很常用的方法。
我记得有一些伪代码: SET @sql = 'SELECT FROM table_name WHERE column_name IN (...)';然后将数组转换为字符串并拼写出来。
我觉得这个还不错。
无论如何你都可以运行它。
但是,您应该注意类型的一致性,不要搞乱它。
例如,我曾经有一个数组中有一个字符串,SQL执行不正确,产生了一堆乱七八糟的记录。
因此,类型必须严格匹配。
也有成绩。
如果您的数组很大,动态 SQL 可能会很慢,而使用临时表可能会更快。
我以前尝试过。
这是没有意义的,因为数组只有 5 个值。
如果您有数百个值,临时表肯定会更快。
此外,必须防止 SQL 注入。
您不能直接连接字符串。
必须使用参数化。
我理解这一点并使用准备好的语句。
在 PHP 中,我建议使用 PDO 将数组传递给 $stmt->prepare,然后运行它。
这是安全的。

处理空数组也是一个问题。
我记得在 PostgreSQL 中,如果数组为空,IN 查询不会返回任何内容。
其他数据库也类似。
如果数组为空,则整个查询将没有结果。
另外,使用内部封装的 ORM 框架,例如 Doctrine 和 Hibernate。
您可以编写自己的条件,它们将被自动处理。
请您解除后顾之忧。
然而,有时在调试和检查生成的 SQL 时您需要了解这些基础知识。
当时我就很困惑,因为ORM找不到,SQL也写不好。
后来我才意识到,这归根结底是基本原则。
也许我太极端了,认为自己编写 SQL 更直观。
不管怎样,如果你做得多了,你就会习惯的,对吧?

C#巧用Index和 Range查询数组

索引类型简化了索引。
示例:字符串“Hello, World!”使用 ^1 获取最后一个字符“!”。

范围类型有利于范围拦截,例如:字符串“Hello, World!”使用 5 .. 绕过“World!”。

注意:使用时请确保版本支持C8 .0以上。
数组旁路避免了复制。
当性能敏感时,请考虑 Memory 或 Span