【问题标题】:Alternative to in operator in mysql替代 mysql 中的 in 运算符
【发布时间】:2013-05-15 10:40:48
【问题描述】:

我看到In operator alternative in mysql

我几乎有25,000 ids。我正在使用in 运算符。然后我得到Stackoverflow Exception。mysql 中的IN 运算符还有其他选择吗?

提前谢谢..

【问题讨论】:

  • 你可以使用exist..它比In快。 Exist 将在找到 1 个匹配项时停止搜索 stackoverflow.com/questions/3999600/…
  • 您可以在循环中动态生成查询并用 OR 语句替换 IN。但结果将是相同的(或更糟)我猜......也许将查询分割成几个最小的查询是选项(5个查询和5000个元素)?

标签: mysql in-operator


【解决方案1】:

如果 ID 在另一个表中:

SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);

那么您可以使用联接代替:

SELECT table1.* FROM table1 INNER JOIN table2 ON table1.id = table2.id;

【讨论】:

    【解决方案2】:

    您可以执行以下操作:

    1 - 创建MySQL Temporary Table

    CREATE TEMPORARY TABLE tempIdTable (id int unsigned not null primary key);
    

    2 - 将你所有的 id 插入到临时表中

    对于列表中的每个 id:

    insert ignore into myId (id) values (anId);
    

    (这将有额外的好处,即为最后一步删除重复的 id 列表)

    3 - 加入临时表

    SELECT t1.* FROM myTable1 t1 INNER JOIN tempIdTable tt ON t1.id = tt.id;
    

    一旦您的连接断开,临时表就会消失,因此您不必担心在下次创建它之前将其断开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-10
      • 2011-10-20
      • 2016-12-22
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      相关资源
      最近更新 更多