SQL:在仅执行1个查询时确定2个单独过滤条件的记录计数

时间:2013-05-22 10:20:46

标签: sql

假设我有一张BOOK表。

具有这种结构:

create table BOOK (
  AUTHOR varchar2(100),
  TITLE  varchar2(100)
);

我想要做的是检查/(或计数,计数(*)= 1)是否存在作者='John Smith'的书,以及是否存在由'John Smith'创作的书籍字母'T'。

我提出了两个SQL语句。

select count(1)
  from BOOK
 where AUTHOR = 'John Snow'
   and rownum = 1

select count(1)
  from BOOK
 where AUTHOR = 'John Snow'
   and TITLE like = 'T%'
   and rownum = 1

我的问题是:有没有办法可以让我知道是否存在这样一个标准的书(我需要知道John Snow是否有一本书,以及他是否写了一本书以一封标题开头的书'' T')只执行1次查询?这样执行这1个查询会比从上面执行2个查询更快吗?谢谢!

2 个答案:

答案 0 :(得分:2)

select
    SIGN(count(*)),
    SIGN(count(CASE WHEN TITLE like 'T%' THEN 1 ELSE NULL END)),
from BOOK
where AUTHOR = 'John Snow';

答案 1 :(得分:2)

嗯,您可以将信息分为两列:

select (case when sum(case when AUTHOR = 'John Snow' then 1 else 0 end) > 0
             then 1
             else 0
        end) as AuthoredByJohnSnow,
       (case when sum(case when AUTHOR = 'John Snow' and Name like 'T%' then 1 else 0 end) > 0
             then 1
             else 0
        end) as AuthoredByJohnSnowBookT
from Book

AUTHOR = 'John Snow'放在where子句中,可以提高效率。这显然不会这样做,因此您可以在select

中轻松添加更多因素