我有下表用于文档存储。该文档可以是具有多个页面的书籍,从0开始的页面编号或单页文档。
Category
Title
PageNo - integer
LineNo integer
Key
Value
我需要一个查询,从表中提取属于单页文档和Category1的所有键。
我有以下查询:
SELECT DISTINCT Key
FROM Materials
WHERE Category='Category1' and Key NOT IN
(SELECT DISTINCT Key
from Materials
WHERE Category='Category1'
and PageNo>0)
查询工作正常,不包括所有超过1页的材料。我想重写查询以在性能方面改进它,并且如果可能的话,还要避免任何重复的代码,如关键字DISTINCT和WHERE子句。我很欣赏任何正确方向的指示。
答案 0 :(得分:3)
如果PageNo不为空
SELECT Key
FROM Materials
WHERE Category='Category1'
GROUP BY Key
having max(PageNo) <= 0
如果PageNo可以为空
SELECT Key
FROM Materials
WHERE Category='Category1'
GROUP BY Key
having max(isnull(PageNo,0)) <= 0
答案 1 :(得分:1)
删除第二个DISTINCT
查询应该是:
SELECT DISTINCT Key
FROM Materials
WHERE Category='Category1'
and Key NOT IN
(SELECT Key
from Materials
WHERE Category='Category1'
and PageNo>0)