我知道这是一个非常愚蠢的要求,相信我我尝试了一切。这是我最后的选择。
我正在尝试运行子查询。令人惊讶的是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/