0

是否可以改进以下查询:

SELECT * 
FROM   search s left join search_criteria sc ON s.id = sc.search_id
WHERE  sc.deleted_at IS NOT NULL 
AND    s.id NOT IN
        (  SELECT s.id
           FROM   search s
                    left join search_criteria sa ON s.id = sc.search_id
           WHERE sc.deleted_at IS NULL
        )
GROUP BY s.id

谢谢

4

3 回答 3

0

这取决于 - 如果默认数据库是 kelformation,那么我认为您的查询有效地简化为:

SELECT  * 
FROM    search s left join search_criteria sc ON s.id = sc.search_id
WHERE   sc.deleted_at IS NOT NULL 
GROUP BY s.id
于 2012-06-19T09:51:17.190 回答
0

考虑下一个场景:

你有一个装满弹珠的盒子。什么会更快?

  • 展示整个盒子(把它洒在桌子上)

  • 或仅显示带有绿点的弹珠(您需要在显示之前检查每个单独的弹珠)。

现在,看来您必须排除,所以您必须接受它。
MySql 存在内部查询问题。您需要将其更改为 LEFT JOIN。
提供您的架构以获得更详细的答案。

于 2012-06-19T09:52:41.190 回答
0

尝试这个 ::

SELECT * 
FROM   search s
          left join search_criteria sc ON s.id = sc.search_id
          left join kelformation.search ks on (s.id=ks.id)
          left join search_criteria sa ON ks.id = sa.search_id
WHERE  sc.deleted_at IS NOT NULL and sc.deleted_at IS NULL 
AND    /*Primary key of kelformation.search */ is null
GROUP BY s.id
于 2012-06-19T10:06:46.810 回答