0

假设我有一个 BOOK 表。

使用这种结构:

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

我想要做的是检查/(或计数,计数(*)= 1)是否存在作者='约翰史密斯'的书,以及是否存在由'约翰史密斯'以字母'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 个查询更快吗?谢谢!

4

2 回答 2

2
select
    SIGN(count(*)),
    SIGN(count(CASE WHEN TITLE like 'T%' THEN 1 ELSE NULL END)),
from BOOK
where AUTHOR = 'John Snow';
于 2013-05-22T10:40:47.187 回答
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.

于 2013-05-22T10:42:11.037 回答