如何查找不在此数组中的所有记录? (MySql)

Posted

技术标签:

【中文标题】如何查找不在此数组中的所有记录? (MySql)【英文标题】:How to find all records which are NOT in this array? (MySql) 【发布时间】:2011-03-30 03:21:54 【问题描述】:

我有一个数组,其中包含一堆 ID:s...

我不知道如何在 mysql 中编写查询来查找不在此数组中的所有记录。

    SELECT * FROM main_table WHERE ..........

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

像这样:

$str = implode(',', $your_array);

上述语句将数组转换为逗号分隔的字符串。

"SELECT * FROM main_table WHERE id NOT IN ('$str')"

更多信息:

http://dev.mysql.com/doc/refman/5.0/en/any-in-some-subqueries.html

【讨论】:

小调整:$str = count($your_array) != 0 ? implode(',', $your_array); : "null";IN 对空括号反应不佳。 我也是这么做的。但随着我的阵列大小增加,我收到“MySQL 服务器已消失”错误。我找到了几个解决方案,如何调整 MySQL 以处理此类请求,但我觉得这个解决方案不太适合大型数组。 我尝试将这条 sql 语句应用于 WordPress wp_users 表和 user_email 字段,以逗号分隔的五个电子邮件地址的字符串作为列表。它不起作用,返回所有电子邮件地址。我刚刚发现它不起作用,因为列表(或者如果您使用 implode())没有用 ' (打开和关闭撇号)包装每个列表项。因此, implode(",",$str) 产生“user1@gmail.com,user2@mydomain.com,user3@mydomain.com”。这使sql失败。该列表必须像这样构造:WHERE user_email NOT IN ('user1@gmail.com','user2@mydomain.com','user3@mydomain.com')";【参考方案2】:
SELECT * 
  FROM main_table
 WHERE id NOT IN(1, 2, 3)

【讨论】:

只有代码的答案在 *** 上的价值很低。

以上是关于如何查找不在此数组中的所有记录? (MySql)的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何查找和删除MYSQL数据库中包含特定字符串的记录

SQL查询以查找ID不在另一个表中的记录

用于查找一个表中但不在另一个表中的行的 MySQL 查询

Javascript算法在数组中查找不在另一个数组中的元素

MySQL按顺序查找每组最近/最大的记录

在 O(1) 空间中的数组中查找重复元素(数字不在任何范围内)