【问题标题】:Need help structuring a 'complicated' MySQL query for multiple databases需要帮助为多个数据库构建“复杂”的 MySQL 查询
【发布时间】:2012-09-11 21:15:48
【问题描述】:

我正在尝试对没有匹配列的表运行两个 MySQL 查询。仅当一个列的一部分与另一个数据库中的列匹配时,这两个查询的结果才需要匹配并显示信息。这是我目前所拥有的:

select data2, time_id from db.table1
where data2 in
(select right(dst,10) from db2.table2
where calldate like '2012-09-01%' and lastdata like <blocked for privacy>)
having (time_id between '1346475600' and '1346562000');

在我的理解中,应该首先调用第 3-4 行的子查询,对吗?我对这个声明的问题是它总是超时。只是时间太长了。我的格式不正确吗?我敢肯定,另一种选择是使用 join 声明,在这个方向上的任何帮助都会很棒。

【问题讨论】:

  • 表不是数据库。加入两个数据库相当困难。
  • 好的,那你解释我在这里做什么?我应该从哪里开始?

标签: mysql join subquery


【解决方案1】:

您并没有错误地格式化它,这只是一个非常糟糕的查询,并且需要服务器进行一些荒谬的计算。让我们采取一些步骤来做正确的事,实际上只有一件大事和一件小事。

  1. 不要尝试加入部分字段。向 table2 添加一列,该列将包含要加入的数据。运行查询以填充该字段。添加触发器以使该字段保持最新。不允许提醒架构?创建一个临时表并相应地填充它,然后加入它。
  2. 不要在日期时间字段上使用点赞,而是说call date BETWEEN &lt;datetime 1&gt; AND &lt;datetime 2&gt;

【讨论】: