首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL/MySQL中的OR条件数

问SQL/MySQL中的OR条件数
EN

Stack Overflow用户
提问于 2013-08-16 21:16:54
回答 2查看 1.1K关注 0票数 0

有人知道我可以在单个查询中为MySQL和MSSQL设置的最大数量的MySQL条件吗?

EN

回答 2

Stack Overflow用户

发布于 2013-08-16 21:28:23

从您的评论中的信息,只需使用子查询。例如:

代码语言:javascript
复制
delete tblCustomers
where CustomerId in (select CustomerId from tblOtherTable)

更新

考虑到你的情况,只有两种可能的方法。

  1. 从MSSQL导出数据。然后将数据导入到MySQL服务器中的临时表中。导入之后,运行一个类似于上面的查询。
  2. 编写一个C#应用程序,它可以提取所有您想要的值,并对您的MySQL数据库运行一组INSERT/UPDATE查询。

到目前为止,第一个选择是最好的,因为它相当简单,而且运行速度很快。第二个选项并不好,因为它意味着您将对MSSQL服务器中的每个记录执行2个查询。(查找记录是否存在,然后是MySQL服务器上的INSERT或UPDATE语句。

票数 0
EN

Stack Overflow用户

发布于 2013-08-16 21:30:03

在MySQL中,可以包含在SQL语句中的OR条件的数量受到SQL语句最大长度的限制,而OR语句的最大长度受max_allowed_packet变量设置的限制。

显示像'max_allowed_packet`‘这样的变量

(注意:max_allowed_packet的值是以字节而不是字符指定的,如果您的SQL语句包含多字节字符,则需要注意)。

当面对创建一个包含大量OR条件的语句时,通常有一种不同的方法来执行相同的操作,例如IN (list)或JOIN操作。

在MySQL中,一个更有效的方法是创建一个表并从一个文件中加载它。(这种方法的“大石头”难点在于使字符集编码兼容。)

如果您可以用.CSV或utf8编码从Server生成一个latin1或utf8文件(每个ID要删除一行),那么字符集匹配更像是速度提升而不是巨石。

在MySQL方面:

代码语言:javascript
复制
CREATE TABLE ids_to_delete (id INT PRIMARY KEY);

LOAD DATA INFILE '/tmp/ids_to_delete.csv' INTO TABLE ids_to_delete
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES;

-- rows to be deleted (save a backup of this if you don't already have a mysqldump)
SELECT t.id
  FROM my_target_table t
  JOIN ids_to_delete d
    ON d.id = t.id ;

-- perform the delete
-- DELETE t.*
--   FROM my_target_table t
--      JOIN ids_to_delete d
--   ON d.id = t.id ;

为了只加载无符号整数值(^[0-9]*$)的字符表示,转换应该没有任何问题。数字字符'0‘到'9’的编码为x'30‘- x'39',latin1和utf8的窗口样式为x'0d0a’。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18282250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档