Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 再选择还是不再选择?_Mysql_Sql_Subquery - Fatal编程技术网

Mysql 再选择还是不再选择?

Mysql 再选择还是不再选择?,mysql,sql,subquery,Mysql,Sql,Subquery,我开始熟悉Subselect,但我只是在挠头,为什么MySQL会用以下内容踢自己的腹股沟: SELECT id_topic, id_member_comment, pd.username, dt_post FROM forum_comment c LEFT JOIN persondata pd ON c.id_member_comment = pd.id_member WHERE id_comment IN ( SELECT MAX(last_id_c

我开始熟悉Subselect,但我只是在挠头,为什么MySQL会用以下内容踢自己的腹股沟:

SELECT
    id_topic,
    id_member_comment,
    pd.username,
    dt_post
FROM forum_comment c 
LEFT JOIN persondata pd
ON c.id_member_comment = pd.id_member 
WHERE id_comment IN (
    SELECT MAX(last_id_comment) AS id_comment 
    FROM forum_topic
    GROUP BY cat_id
);
如果我运行查询,请分别按cat_id从论坛主题组中选择MAXlast_id_comment作为id_comment,并将结果集替换为中的id_comment。。。节,然后立即执行,但当上面的查询运行时,使用subselect,需要很长时间才能完成


优化器一个接一个地遍历所有数百万条注释,而不是首先运行子查询并使用其值?我错过了什么

尝试将IN作为内联派生表移动到FROM子句中

SELECT 
    id_topic, id_member_comment, pd.username, dt_post
FROM
   (
   SELECT MAX(last_id_comment) AS id_comment
   FROM forum_topic 
   GROUP BY cat_id
   ) AS foo
   JOIN
   forum_comment c ON foo.id_comment = c.id_comment --AND a cat_id join too?
   LEFT JOIN
   persondata pd ON c.id_member_comment = pd.id_member;

尝试将IN作为内联派生表移动到FROM子句中

SELECT 
    id_topic, id_member_comment, pd.username, dt_post
FROM
   (
   SELECT MAX(last_id_comment) AS id_comment
   FROM forum_topic 
   GROUP BY cat_id
   ) AS foo
   JOIN
   forum_comment c ON foo.id_comment = c.id_comment --AND a cat_id join too?
   LEFT JOIN
   persondata pd ON c.id_member_comment = pd.id_member;

子查询有误报的风险,因为它将为每个类别返回最高的id_注释-如果该值与不相关的类别匹配,则仍将返回该行。forum_comment或persondata表中是否有任何类别列?这是AOK,感谢您的努力。子查询存在误报风险,因为它将返回每个类别的最高id_注释-如果值与不相关的类别匹配,则仍将返回该行。论坛评论或个人数据表中有分类栏吗?这是AOK,谢谢你的努力。我会使用EXISTS而不是aJOIN@OMG小马:我希望使用SQL Server,但从我目前看到的情况来看,MySQL似乎更喜欢连接……我会使用EXISTS而不是aJOIN@OMG小马:我会使用SQL Server,但从我目前看到的情况来看,MySQL似乎更喜欢连接。。。