【问题标题】:Mysql subquery returns incorrect resultsMysql子查询返回不正确的结果
【发布时间】:2015-10-09 23:52:56
【问题描述】:

我知道这是一个非常愚蠢的问题,相信我我尝试了一切。这是我最后的选择。

我正在尝试运行子查询。令人惊讶的是 mysql 挂起(即使它不是一个大查询)。

我正在尝试运行此查询以返回 Link_id 列表

    select distinct link_id from join_link_object where obj_id = (select group_concat(obj_id) from xalt_object where module_name like '%intel-compilers/2016.0.047%');

+---------+
| link_id |
+---------+
|  153249 |
+---------+

返回的结果不正确。而不是返回 link_id 查询的列表只返回第一个。

我知道使用= 不是一个好主意,我尝试使用IN 但提示只是挂起并且什么也不返回。

虽然单独运行子查询然后运行主查询及其结果会给出正确的结果(手动验证)。

mysql> select group_concat(obj_id) from xalt_object where module_name like '%intel-compilers/2016.0.047%';
+-------------------------------------------+
| group_concat(obj_id)                      |
+-------------------------------------------+
| 352304,352305,352306,352307,352308,354813 |
+-------------------------------------------+

然后运行主查询 -

mysql> select distinct link_id from join_link_object where obj_id in (352304,352305,352306,352307,352308,354813);
+---------+
| link_id |
+---------+
|  153249 |
|  153467 |
|  153996 |
|  154170 |
|  155077 |
|  155099 |
|  155100 |
+---------+

我什至尝试使用 EXISTS,但这些查询返回荒谬的结果(大约 156995 行)-

select distinct link_id from join_link_object where EXISTS  (select obj_id from xalt_object where module_name like '%intel-compilers/2016.0.047%');

请指教!谢谢

【问题讨论】:

  • 在第一个查询中使用where obj_id = 在倒数第二个查询中使用where obj_id in 尝试在第一个查询中使用in

标签: mysql


【解决方案1】:

在第一个查询中,您将obj_id 与子查询结果进行比较,此时您应该过滤 obj_id in 子查询结果,就像您在测试中所做的那样:

select distinct link_id 
from join_link_object 
where obj_id in (352304,352305,352306,352307,352308,354813);

应该是这样的:

select distinct link_id 
from join_link_object 
where obj_id 
in (select obj_id from xalt_object where module_name like '%intel-compilers/2016.0.047%');

要提高性能,试试这个:

SELECT DISTINCT jlo.link_id 
FROM join_link_object AS jlo 
INNER JOIN xalt_object AS xo 
ON (jlo.obj_id = xo.obj_id) 
WHERE xo.module_name LIKE '%intel-compilers/2016.0.047%';

【讨论】:

  • 正如我所说,我试过 IN 但整个事情都挂了。
  • 我明白了,问题是group_concat
  • 天哪!说真的,我认为我正处于无法思考的阶段。谢谢这工作。但是整个查询需要 7.17 秒,此时 obj_id 的列表非常小。我想知道是否有一种方法可以让我更快。
  • 使用joins @user3802162 查看this blog postthis SO post
  • 非常感谢乔纳森,感谢您的帮助,尽管我无法将其标记为已解决(声誉低下)。我会想办法关闭它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多