改进sql查询以排除项目

时间:2012-06-19 09:46:20

标签: mysql sql

是否可以改进以下查询:

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

由于

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

考虑下一个场景:

你有一个装满大理石的盒子。什么会更快?

  • 显示整个方框(只是将其洒在桌子上)

  • 或仅显示带有绿点的大理石(您需要在展示之前检查每个大理石)。

现在,你似乎必须排除,所以你必须坚持下去 MySql存在内部查询问题。您需要将其更改为LEFT JOIN 提供您的架构以获得更详细的答案。

答案 2 :(得分: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