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



假设我有一个BOOK表

的结构:

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

我要做的是检查/(或count, count(*) = 1)是否存在author = 'John Smith'的书,以及是否存在以字母'T'开头的由'John Smith'撰写的书。

我想出了两个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

我的问题是:是否有一种方法可以让我知道是否存在这样的标准的书(我需要知道是否有一本由约翰·斯诺写的书,他是否写了一本标题以字母"T"开头的书),只执行一个查询?这样,执行这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中添加更多因子。

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

最新更新