我知道这是一个非常愚蠢的要求,相信我我尝试了一切。这是我最后的选择。
我正在尝试运行子查询。令人惊讶的是mysql挂起了(尽管它不是一个大查询)。
我试图运行此查询以返回链接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 |
+---------+

返回的结果不正确。查询只返回第一个链表,而不是返回链表。
我知道使用=不是一个好主意,我试过使用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%');

请指教!谢谢

最佳答案

在第一个查询中,您将obj_id与子查询结果进行比较,当您应该像在测试中那样过滤obj_idin子查询结果时:

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%';

关于mysql - MySQL子查询返回错误结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33048726/

10-14 15:21
查看更多